अलग-अलग मुख्य कारकों की n संख्या


10

कम से कम समारोह, प्रोग्राम, या अभिव्यक्ति है कि गणना बनाएं A073329 , यानी, a(n)है वें संख्या होने n अलग अभाज्य गुणकों। इनपुट अनुक्रम में लौटने वाले तत्वों की संख्या है। 0 < n। मैं पूर्णांक परिशुद्धता के साथ असंबद्ध हूं। मुझे सिर्फ एल्गोरिथम चाहिए। ऐसी भाषाओं के लिए जो मनमाने ढंग से बड़े पूर्णांकों का समर्थन नहीं करती हैं, हम सिर्फ उनका दिखावा करेंगे।

आप ऊपर दिए गए OEIS के लिंक का अनुसरण करके परीक्षण के मामले पा सकते हैं।

अपडेट करें:

मैं यह स्पष्ट कर दूं कि आपको अपने प्रोग्राम, फंक्शन, या एक्सप्रेशन से पूर्णांक अनुक्रम वापस करने की आवश्यकता है । दूसरे शब्दों में, 1 से सभी के लिए f(x)गणना करनी चाहिए । 8 को देखते हुए , आपके फ़ंक्शन को एक सरणी या कुछ अन्य उपयुक्त डेटा संरचना के रूप में वापस आना चाहिए ।a(n)nxx2, 10, 60, 420, 4290, 53130, 903210, 17687670


सीमा / सीमा ??
शाम

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

1
शायद यह अधिक खुला है, जब हम कहते हैं: output a(1), ... a(n)बदले की किसी चीज़ के बदले ... की एक सरणी की तरह ...
उपयोगकर्ता अज्ञात

जवाबों:


2

अजगर, 144 चरस

R=range
P=[x for x in R(2,99)if all(x%i for i in R(2,x))]
for a in R(input()):
 x=n=0
 while n<=a:n+=sum(x%p==0for p in P)==a+1;x+=1
 print x-1

X = 8 के पूरा होने में लगभग 2 मिनट लगते हैं।


2

जावा, एक लाइन में 170 अक्षर

int a(int n) {
    int a = 2, t = a, m = 1, i = 1;
    Set s = new HashSet();
    while (i++ > 0) {
        if (t % i == 0) {
            s.add(i);
            t /= i;
            if (t == 1) {
                if (s.size() == n) {
                    if (n == m) {
                        break;
                    }
                    m++;
                }
                t = ++a;
                s.clear();
            }
            i = 1;
        }
    }
    return a;
}

अद्यतन, +77 वर्ण IOL

int[] f(int n) {
    int[] f = new int[n];
    for (int i = 0; i < n; i++) {
        f[i] = a(i+1);
    }
    return f;
}

यह वास्तव में गलत है, लेकिन करीब है, हालांकि मुझे लगता है कि मुझे शायद अपना प्रश्न स्पष्ट करना चाहिए। आपको पूर्णांक अनुक्रम लौटाया जाना चाहिए। उदाहरण के लिए, यदि इनपुट 8 है, तो आपको A073329 अनुक्रम में पहले 8 तत्वों को वापस करना चाहिए।
ग्रेगरी हिगले

@ अद्यतन पर गौर करें
क्यूबेकैन

मुझे खेद है - मैंने कार्य की अपनी गलतफहमी के आधार पर आपको नीचे वोट दिया, जिसने OEIS- लिंक को पढ़ने के बाद स्पष्ट किया। यदि आप अपनी पोस्ट का मामूली संपादन करते हैं, तो मैं अपना पद छोड़ दूंगा।
उपयोगकर्ता अज्ञात

@ आपकी टिप्पणी की मेरी गलतफहमी के कारण, आपके अनुरोध को स्पष्ट करें, कृपया
cubanacan

मैंने प्रश्न को गलत समझा, और सोचा, सभी कारकों को अलग-अलग नियम होने चाहिए, इसलिए 2 * 3 * 5 * 2 गलत उत्तर होगा। इसलिए मैंने झूठे मधुमक्खी के लिए आपके जवाब को वोट दिया। तब मुझे पता चला कि समझने के लिए 'अलग-अलग नियम' कैसे होते हैं, और मैं अपनी वोटिंग को सही करना चाहता था, लेकिन मुझे अपना वोट बदलने की अनुमति नहीं है - यह केवल पहले, कुछ मिनटों में संभव है। लेकिन अगर आप अपना जवाब संपादित करते हैं, तो मैं अपना वोट बदल सकता हूं। तो मैं आपको बस थोड़ा सा संपादित करने के लिए कह रहा हूं।
उपयोगकर्ता अज्ञात

2

जावा (अनगुल्ड)

public class M {

    public static void main(String[] a) {
        final int N = 100000000;
        int[] p = new int[N];
        for(int f = 2; f * f < N; f++) {
            if(p[f] == 0)
                for(int k = f; k < N; k += f)
                    p[k]++;
        }
        for(int i = 1; i <= 8; i++) {
            int c = 0, j;
            for(j = 1; j < N && c < i; j++)
                if(p[j] == i)
                    c++;
            if(c == i)
                System.out.println(i + " = " + --j);
        }
    }
}

एक छलनी एल्गोरिथ्म का उपयोग करता है। यह बहुत जल्दी है। (6 सेकंड) तक के लिए सही ढंग से काम करेंगे 8, शायद कुछ भी उच्चतर के लिए विफल हो जाएगा।


1

जावास्क्रिप्ट, 149 चार

function(n){function f(x){for(r=[],o=x,z=2;z<=o;x%z?++z:(x/=z,r.indexOf(z)+1?0:r.push(z)));return r}for(c=0,i=1;c<n;)f(++i).length==n?c++:0;return i}

N> = 6 के लिए अनुत्तरदायी लगता है, इसलिए मैंने परीक्षण नहीं किया है कि कितना समय लगता है (मेरा ब्राउज़र हर 10 सेकंड में एक त्रिशंकु स्क्रिप्ट सूचना को पॉप अप करता है या इसलिए इसलिए मैं इसे सही ढंग से समय नहीं दे सकता हूं और मैं पूरी तरह से लटका नहीं चाहता हूं यदि मैं चेक "फिर से यह न दिखाएं" ...)

संपादित करें: सरणी वापस करने के लिए 200 अक्षर (+51) है :

function(n){function F(){function f(x){for(r=[],o=x,z=2;z<=o;x%z?++z:(x/=z,r.indexOf(z)+1?0:r.push(z)));return r}for(c=0,i=1;c<n;)F(++i).length==n?c++:0;return i}for(a=[];n>0;n--)a.push(f());return a}

0

जे, 32 बाइट्स

({"0 1~i.@#)(]/.~#@~.@q:)

लेकिन जब से मैं इतनी देर से अपने ही सवाल का जवाब दे रहा हूं, हम इस जवाब को एक जिज्ञासा के रूप में छोड़ देंगे।

हमारी साइट का प्रयोग करके, आप स्वीकार करते हैं कि आपने हमारी Cookie Policy और निजता नीति को पढ़ और समझा लिया है।
Licensed under cc by-sa 3.0 with attribution required.