अछूत


9

अछूत संख्या α

एक अछूत संख्या एक धनात्मक पूर्णांक है जिसे किसी भी धनात्मक पूर्णांक के सभी समुचित विभाजकों के योग के रूप में व्यक्त नहीं किया जा सकता है (अछूत संख्या सहित)।

उदाहरण के लिए, संख्या 4 अछूत नहीं है क्योंकि यह 9: 1 + 3 = 4. के उचित विभाजकों के योग के बराबर है। संख्या 5 अछूत है क्योंकि यह किसी भी सकारात्मक पूर्णांक के उचित विभाजकों का योग नहीं है। 5 = 1 + 4, केवल 5 सहित अलग-अलग सकारात्मक पूर्णांक के योग के रूप में 5 लिखने का एकमात्र तरीका है, लेकिन यदि 4 एक संख्या को विभाजित करता है, तो 2 भी करता है, इसलिए 1 + 4 किसी भी संख्या के सभी उचित भाजक का योग नहीं हो सकता है (तब से कारकों की सूची में 4 और 2 दोनों शामिल होंगे)।

माना जाता है कि संख्या 5 केवल विषम अछूत संख्या है, लेकिन यह साबित नहीं हुआ है: यह गोल्डबैक अनुमान के थोड़े मजबूत संस्करण से अनुसरण करेगा। β

असीम रूप से कई अछूत संख्याएं हैं, एक तथ्य जो पॉल एर्दो द्वारा सिद्ध किया गया था।

अस्पृश्यों के कुछ गुण:

  • कोई भी अछूत प्रधानमंत्री से 1 अधिक नहीं है
  • 5 को छोड़कर कोई भी अछूत प्राइम से 3 अधिक नहीं है
  • कोई भी अछूत एक आदर्श संख्या नहीं है
  • अब तक, 2 और 5 से अलग सभी अछूत समग्र हैं।

उद्देश्य

एक प्रोग्राम या फ़ंक्शन बनाएँ जो मानक इनपुट या फ़ंक्शन मापदंडों केn माध्यम से एक प्राकृतिक संख्या लेता है और पहले अछूत संख्याओं को प्रिंट करता है ।n

आउटपुट में संख्याओं के बीच अलगाव होना चाहिए, लेकिन यह कुछ भी हो सकता है (यानी newlines, अल्पविराम, रिक्त स्थान, आदि)।

यह कम से कम काम करने में सक्षम होना चाहिए 1 <= n <= 8153। यह तथ्य यह है कि बी-फ़ाइल OEIS प्रवेश के लिए प्रदान की जाती है पर आधारित है γ अप करने के लिए चला जाता है n = 8153

मानक खामियों को हमेशा की तरह खारिज कर दिया जाता है।

उदाहरण I / O

1    -> 2
2    -> 2, 5
4    -> 2, 5, 52, 88
10   -> 2, 5, 52, 88, 96, 120, 124, 146, 162, 188
8153 -> 2, 5, 52, 88, 96, 120, ..., ..., ..., 59996

ये है , इसलिए बाइट्स की कम से कम संख्या जीतती है।


α - विकिपीडिया , β - मैथवर्ल्ड , O - OEIS


किसी कारण के लिए इसे 'खोजने के लिए अर्धसूत्री संख्याओं के सवाल' के रूप में चिह्नित किया गया था, हालांकि कार्य पूरी तरह से अलग हैं। इस मामले में, आपको यह सुनिश्चित करने के लिए जांचना चाहिए कि किसी भी प्राकृतिक संख्या के सही विभाजक का कोई योग निश्चित संख्या के बराबर नहीं हो सकता है।


यह विशुद्ध रूप से सट्टा है, क्योंकि मैंने वास्तव में इस बारे में नहीं सोचा है कि मैं इसे कैसे हल करूंगा: क्या यह धोखा होगा यदि मैंने परिणामी संख्याओं पर एक ऊपरी सीमा मान ली है? कहो, अगर मैंने कोड लिखा है जो केवल अछूत संख्या 60,000 तक पाता है? यह इनपुट रेंज को कवर करने के लिए पर्याप्त होगा। लेकिन निश्चित रूप से मैं केवल यह जानता हूं कि आपके द्वारा प्रदान किए गए आंशिक परिणामों के आधार पर।
रेटो कोराडी

मुझे लगता है कि यह ठीक होगा। यह तकनीकी रूप से कठिन परिणाम नहीं है, जहां तक ​​मुझे पता है मानक खामियों का उल्लंघन नहीं करता है। जब तक यह ठीक है कि बाकी की युक्ति फिट बैठता है।
केड

@vihan निश्चित रूप से नहीं।
केड

जवाबों:


6

पायथ, 21 बाइट्स

.f!fqZsf!%TYStTSh^Z2Q

चेतावनी: अविश्वसनीय रूप से धीमा। टेस्ट रन और टाइमिंग नीचे।

$ time pyth -c '.f!fqZsf!%TYStTSh^Z2Q' <<< 3
[2, 5, 52]

real    2m46.463s
user    2m46.579s
sys 0m0.004s

यह मूल रूप से संभव के रूप में जानवर बल के रूप में है, संभावित अकेले नंबर वर्ग एक तक के कारक का परीक्षण करता है।


4

सी, 104 बाइट्स

j,i,z,w;u(y){for(z=2;y;z++)for(w=0;(++w<z*z||0&printf("%i ",z)+y--)&&j^z;)for(i=j=0;++i<w;j+=i*!(w%i));}

Y > 20 के लिए कुछ मिनट लगेंगे , लेकिन जो भी हो।


2

जावा, 310 बाइट्स

class U{int[] p;U(int e){p=new int[(int)4e9];for(int i=1,c=0;c<e;i++)if(u(i)>0){System.out.println(i);c++;}}int p(int n){if(p[n]!=0)return p[n];int i,s=1;for(i=2;i<=n-1;i++)s+=n%i==0?i+(n/i!=i?n/i:0):0;return(p[n]=s);}int u(int n){if(n==1)return 0;for(int i=2;i<=(n-1)*(n-1);i++)if(p(i)==n)return 0;return 1;}}

गोल्फ के साथ-साथ मैं भी कर सकता था, लेकिन मुझे यह सुनिश्चित करने में अधिक दिलचस्पी थी कि यह उचित समय में चले। अनगलॉग संस्करण संभवतः अधिक दिलचस्प है

public class Untouchable {
    int[] properDivisorSumMap;


    public Untouchable(int estimatedMaxium){
        properDivisorSumMap = new int[(estimatedMaxium-1)*(estimatedMaxium-1)];
    }


    public int properDivisorSum(int n){
        if(properDivisorSumMap[n] != 0){
            return properDivisorSumMap[n];
        }

        int sum = 1;
        for(int i=2;i<=(int)Math.sqrt(n);i++){
            if(n%i==0){
                sum+=i;
                if(n/i != i){
                    sum+=n/i;
                }
            }
        }
        properDivisorSumMap[n] = sum;
        return sum;
    }


    public boolean untouchable(int n){
        if(n==1){
            return false;
        }
        for(int i=2;i<=(n-1)*(n-1);i++){
            if(properDivisorSum(i) == n){
                return false;
            }
        } 
        return true;
    }


    public static void main(String[] args){
        Untouchable test = new Untouchable(8480);

        int elements = Integer.parseInt(args[0]);

        for(int i=1,count=0;count < elements;i++){
            if(test.untouchable(i)){
                System.out.printf("%4d: %4d%n",count,i);
                count++;
            }
        }
    }
}

1

गो, ३ ९ ६ बाइट्स

वास्तव में गोल्फ नहीं है, लेकिन यह सभी आवश्यक रेंज कर सकता है। ~ 20min और जरूरतों ~ 7GB (n से स्वतंत्र) में चलता है। 59997 वर्ग तक की सभी संख्याओं के लिए भाजक की गणना करने के लिए एक विशाल सरणी बनाता है।

func untouchable(n int) {
    const C = 59997
    const N = C * C
    s := make([]uint16, N)
    for d := 1; d < N; d++ {
        for i := 2 * d; i < N; i += d {
            v := int(s[i]) + d
            if v > C {
                v = C + 1 // saturate at C+1
            }
            s[i] = uint16(v)
        }
    }
    var m [C]bool
    for i := 2; i < N; i++ {
        if s[i] < C {
            m[s[i]] = true
        }
    }
    for i := 2; n > 0; i++ {
        if !m[i] {
            println(i)
            n--
        }
    }
}
हमारी साइट का प्रयोग करके, आप स्वीकार करते हैं कि आपने हमारी Cookie Policy और निजता नीति को पढ़ और समझा लिया है।
Licensed under cc by-sa 3.0 with attribution required.