Saturday, 15 May 2010

java - Optimize calculation of prime numbers -


इस सवाल का पहले से ही एक उत्तर है: < / P>

  • 2 जवाब
  • 8 जवाब

    मैं प्रोजेक्ट ऑलर से कोशिश कर रहा हूं और मेरा एल्गोरिथ्म बहुत धीमा है। क्या किसी को पता है कि यह कैसे अनुकूलित करें? वह संख्या जिसका मैं गणना कर रहा हूं 600851475143 एल है यह गणना करने के लिए हमेशा लेता है इसलिए मुझे गणना की गति बढ़ाने के लिए एक तरीका चाहिए

    LOGIC:

    • 3 से सभी नंबरों तक उस नंबर -1 तक कॉल करें
    • इनमें से प्रत्येक नंबर के लिए जांचें कि क्या वे विभाजित करके प्रधान हैं उनमें से सभी नंबरों के बीच और यदि उनमें से किसी के द्वारा विभाजित न हो तो वे प्रधान हैं।
    • यदि प्रधानमंत्री तब उन्हें सरणी में जोड़ते हैं, <पूर्व> सार्वजनिक स्थिर शून्य समस्या 3 (लंबी संख्या) {लंबी संख्या 2 = संख्या; लंबा sqrtNumber = (लंबा) गणित। वर्ग (संख्या 2); Int indexNum = 1; बूलियन isPrime = गलत; इंट प्राइमनाम [] = नया इंट [2]; प्राइमनाम [0] = 2; // के लिए एक सरणी में डालता है (int y = 3; y & lt; sqrtNumber; y ++) {isPrime = true; के लिए (इंट न्यूम = 2; एनएएम & lt; y; द न्यू ++) {// यदि y किसी भी संख्या से समान रूप से बांटता है तो यह प्रधान नहीं है अगर (y% theN == 0) {// सरणी में स्टोर नहीं हैप्रति = गलत; टूटना; }} यदि (isPrime == सच) {// सरणी में जोड़ें system.out.println (y); // डाल y सरणी में और सरणी // सिस्टम system.out.println (): "+ y" exapnd; प्राइमैनम्स [सूचकांक] = y; Int [] newArray = नए int [primeNums.length + 1]; सिस्टम। अर्रेकॉपी (प्राइमैनम्स, 0, न्यूअरे, 0, प्राइमैनम्स. लैंप); प्रधानमंत्री = नयाअरेरे; indexNum ++; }}

      ********** UPDATE **************

      मैं वर्गमूल की गणना करता हूं जो गणनाओं को बहुत बढ़ा देता था, लेकिन मैंने कुछ और किया जो कि एक बार तोड़ने के लिए तोड़ने वाला वक्तव्य जोड़ना था, जब मैंने पाया कि यह संख्या प्रधानमंत्री नहीं थी। मैंने इन परिवर्तनों को प्रदर्शित करने के लिए उपरोक्त कोड को संपादित किया है।

      मेरा एल्गोरिदम अभी भी प्रमुख कारकों की गणना करने के लिए गलत है, हालांकि मुझे इसके बारे में एक नज़र रखना होगा और शायद एक नया प्रश्न उठाए। < एचआर>

      आपको हर नंबर से विभाजित करने की जरूरत नहीं है। आपको केवल प्रत्येक प्रधान संख्या से 2 के बीच और आपके नंबर का वर्गमूल विभाजित करना होगा।

No comments:

Post a Comment