पड़ोसी संख्याओं का सर्वोच्च प्रमुख कारक


13

मुझे लगता है कि इस चुनौती को क्रमबद्ध तरीके से समझाना आसान है। एक इनपुट नंबर N से शुरू करें और:

  1. इसका उच्चतम प्रमुख कारक ज्ञात कीजिए
  2. ऊपर और नीचे नंबरों की जांच करें एन और देखें कि क्या उच्चतम प्रधानमंत्री कारक अधिक है (यानी के उच्चतम प्रधानमंत्री कारक N-1 और / या एन 1 का कारक से अधिक है एन
  3. उच्चतर और / या निम्न संख्याओं में पड़ोसी N की जाँच जारी रखें जहाँ उच्चतम कारक बढ़ रहे हैं ( (N-2, N-3 ...) और / या (N + 2, N + 3 ...) और पर)
  4. एक बार किसी भी दिशा में कोई भी प्रमुख कारक नहीं होता है जो कि पहले से ही हमने पाया है कि हम रोक चुके हैं और हमारे द्वारा सामना किए गए उच्चतम प्रमुख कारक को आउटपुट करते हैं।

आइए एक उदाहरण देखें:

245प्रमुख कारक हैं 5, 7, 7। इसके पड़ोसी हैं:

244 -> 2,  2,  61
245 -> 5,  7,  7
246 -> 2,  3,  41

उच्चतम प्रधान कारक दोनों दिशा में बढ़ रहा है, इसलिए हमें अगले पड़ोसी को देखना चाहिए:

243 -> 3,   3,  3,  3,  3
244 -> 2,   2,  2,  61
245 -> 5,   7,  7
246 -> 2,   3,  41
247 -> 13,  19

उच्चतम प्राइम कारक अब दोनों दिशाओं में घट रहे हैं, इसलिए हमने जो उच्चतम प्राइम फैक्टर प्राप्त किया है 61, वह है और इसलिए लौटाया जाना चाहिए।

एक और उदाहरण:

आइए नजर डालते हैं 1024। इसके प्रमुख कारक हैं 2, 2, 2, 2, 2, 2, 2, 2, 2, 2। इसके निकटतम पड़ोसियों के प्रमुख कारक हैं:

1023 -> 3, 11, 31
1024 -> 2,  2,  2,  2,  2,  2,  2,  2,  2,  2
1025 -> 5,  5, 41

उच्चतम प्रधानमंत्री कारक दोनों दिशा में बढ़ रही हैं, से 2करने के लिए 31या 41। आइए पड़ोसियों को देखें:

1022 -> 2, 7,  73
1023 -> 3, 11, 31
1024 -> 2,  2,  2,  2,  2,  2,  2,  2,  2,  2
1025 -> 5,  5, 41
1026 -> 2,  3,  3, 19

के लिए सबसे प्रमुख कारक 1022है 73, और के लिए उच्चतम प्रमुख कारक 1026है 19। चूंकि हम इसमें रुचि नहीं रखते हैं 19, 41इसलिए कम है । यह अभी भी N से छोटी संख्या के लिए बढ़ रहा है, इसलिए हम उस दिशा में अगले एक की जाँच करेंगे :

1021 -> 1021
1022 -> 2, 7,  73
1023 -> 3, 11, 31
1024 -> 2,  2,  2,  2,  2,  2,  2,  2,  2,  2
1025 -> 5,  5, 41
1026 -> 2,  3,  3, 19

1021 एक अभाज्य है, और हमारे द्वारा प्राप्त किया गया सर्वोच्च प्रधान है, इसलिए इसे वापस किया जाना चाहिए।

नियम:

  • आपको केवल इससे Nबड़ा 1और छोटा सकारात्मक मिलेगा 2^31-2
  • इनपुट और आउटपुट प्रारूप वैकल्पिक हैं, लेकिन संख्या 10 बेस में होनी चाहिए।
  • जब तक उच्चतम मूल्य उस दिशा में बढ़ता जा रहा है, तब तक आपको उच्च अपराधों की खोज जारी रखनी चाहिए। निर्देश एक दूसरे से स्वतंत्र हैं।

परीक्षण के मामलों:

प्रारूप: N, highest_factor

2, 3
3, 3
6, 7
8, 11
24, 23 
1000, 997
736709, 5417 
8469038, 9431

मान लीजिए कि हमें N के 2लिए एक सर्वोच्च कारक मिलता है। हम तब 5N-1 के लिए और 61N + 1 के लिए प्राप्त करते हैं। फिर हम 19एन -2 के लिए और 67एन + 2 के लिए प्राप्त करते हैं। क्या हमें कम संख्या में कोशिश करते रहना चाहिए, कब से 19>5या रुकना है 5<61? यानी अधिकतम प्रति पक्ष रखा जाता है? (यदि उदाहरण गणितीय रूप से संभव हो तो मुझे यकीन नहीं है।)
पुरकाकूदरी

@ Pietu1998, क्या अब प्रश्न अधिक स्पष्ट है?
स्टीवी ग्रिफिन

N=2वास्तव में एक किनारे का मामला लगता है क्योंकि 1कोई प्रमुख कारक नहीं है, इसलिए कोई भी अधिकतम कारक नहीं है जिसके साथ हम यह तय करने के लिए तुलना कर सकते हैं कि क्या हमें जारी रखना चाहिए।
जोनाथन एलन

जवाबों:


4

गणितज्ञ, 82 74 बाइट्स

8 बाइट बचाने के लिए मार्टिन एंडर को धन्यवाद!

Max@@(±n_:=#//.x_/;l[t=x+n]>l@x:>t;l=FactorInteger[#][[-1,1]]&)/@{±-1,±1}&

एक पूर्णांक इनपुट लेने और पूर्णांक वापस करने का कार्य करते हैं।

±n_:=#//.x_/;l[t=x+n]>l@x:>tजब तक सबसे बड़ा अभाज्य कारक बढ़ रहा है तब तक एक फ़ंक्शन को परिभाषित करता है ±जो वैश्विक फ़ंक्शन के पूर्णांक इनपुट nको बढ़ाता रहता है। (सबसे बड़ा-प्रधान-कारक फ़ंक्शन के साथ परिभाषित किया गया है l=FactorInteger[#][[-1,1]]&।) {±-1,±1}इसलिए उस फ़ंक्शन को दो बार इनपुट पूर्णांक पर लागू होता है, वेतन वृद्धि के साथ -1और फिर से वेतन वृद्धि के साथ 1। फिर, Max@@(...l...)/@...इस प्रकार पाए गए दो सबसे बड़े-प्रधान कारकों में से बड़ा लेता है।

पिछला सबमिशन:

Max@@(l=FactorInteger[#][[-1,1]]&)/@(#//.x_/;l[t=x+#2]>l[x]:>t&@@@{{#,-1},{#,1}})&

@@@(और आप l@xवहाँ का उपयोग कर सकते हैं ) से परहेज करके कुछ बाइट्स Max@@(±n_:=#//.x_/;l[t=x+n]>l@x:>t;l=FactorInteger[#][[-1,1]]&)/@{±-1,±1}&
बचाए

1

पर्ल, 137 बाइट्स

122 बाइट्स कोड + 15 बाइट्स के लिए -pऔर -Mntheory=:all

sub f{$t=(factor$_+pop)[-1]}$i=$j=1;while($i|$j){f++$c;($i&=$t>$h)&&($h=$t);f-$c;($j&=$t>$l)&&($l=$t)}$_=$h>$l?$h:$l?$l:$_

इसे चलाने के लिए:

perl -pMntheory=:all -e 'sub f{$t=(factor$_+pop)[-1]}$i=$j=1;while($i|$j){f++$c;($i&=$t>$h)&&($h=$t);f-$c;($j&=$t>$l)&&($l=$t)}$_=$h>$l?$h:$l?$l:$_' <<< 736709

यदि आपने ntheoryइंस्टॉल नहीं किया है, तो आप इसे (echo y;echo) | perl -MCPAN -e 'install ntheory'अपने टर्मिनल में टाइप करके इंस्टॉल कर सकते हैं ।


0

रूबी, 99 बाइट्स

->n{f=->n{i=2;n%i<1?n/=i:i+=1while i<n;n};g=->s,z{s+=z while f[s+z]>b=f[s];b};[g[n,1],g[n,-1]].max}

स्पष्टीकरण:

  • f () उच्चतम अभाज्य कारक है
  • जी () एक दिशा में पड़ोसियों की खोज करने वाला कार्य है
  • दोनों दिशाओं में खोज करने के लिए g (n, -1) और (n, + 1) पर लागू करें
हमारी साइट का प्रयोग करके, आप स्वीकार करते हैं कि आपने हमारी Cookie Policy और निजता नीति को पढ़ और समझा लिया है।
Licensed under cc by-sa 3.0 with attribution required.