Primes को परिभाषित करने के विभिन्न तरीके


32

अभाज्य संख्याओं की मेरी पसंदीदा परिभाषा इस प्रकार है:

  • 2 सबसे छोटा प्रधान है।

  • यदि वे छोटे प्राइम से विभाज्य नहीं हैं तो 2 से बड़ी संख्याएं अभाज्य हैं।

हालाँकि यह परिभाषा मनमानी लगती है, 2 क्यों? कुछ और नंबर क्यों नहीं? अच्छी तरह से कोशिश करते हैं कि कुछ अन्य संख्याएँ n-Prime को परिभाषित करेंगी जैसे कि

  • n सबसे छोटा n- प्रधान है।

  • N से बड़े नंबर n-prime हैं यदि वे छोटे n-prime द्वारा विभाज्य नहीं हैं।

कार्य

यहां कार्य एक प्रोग्राम लिखना है जो दो इनपुट लेता है, एक सकारात्मक पूर्णांक n और एक सकारात्मक पूर्णांक a । यह तो तय करेगा अगर एक है n -prime। आपके कार्यक्रम को "हाँ, यह n- प्राइम है" के लिए दो और "नहीं, यह n- प्राइम नहीं है" के लिए दो अलग-अलग मानों का उत्पादन करना चाहिए।

यह एक कोड-गोल्फ प्रश्न है, इसलिए उत्तर बाइट्स में कम बाइट के साथ बेहतर तरीके से बनाए जाएंगे।

टेस्ट

यहाँ n = 2 से n = 12 के लिए पहले 31 अपराधों की सूची दी गई है (1 केवल 1-अभाज्य संख्या है)

n=2: [2,3,5,7,11,13,17,19,23,29,31,37,41,43,47,53,59,61,67,71,73,79,83,89,97,101,103,107,109,113,127]
n=3: [3,4,5,7,11,13,17,19,23,29,31,37,41,43,47,53,59,61,67,71,73,79,83,89,97,101,103,107,109,113,127]
n=4: [4,5,6,7,9,11,13,17,19,23,29,31,37,41,43,47,53,59,61,67,71,73,79,83,89,97,101,103,107,109,113]
n=5: [5,6,7,8,9,11,13,17,19,23,29,31,37,41,43,47,53,59,61,67,71,73,79,83,89,97,101,103,107,109,113]
n=6: [6,7,8,9,10,11,13,15,17,19,23,25,29,31,37,41,43,47,53,59,61,67,71,73,79,83,89,97,101,103,107]
n=7: [7,8,9,10,11,12,13,15,17,19,23,25,29,31,37,41,43,47,53,59,61,67,71,73,79,83,89,97,101,103,107]
n=8: [8,9,10,11,12,13,14,15,17,19,21,23,25,29,31,35,37,41,43,47,49,53,59,61,67,71,73,79,83,89,97]
n=9: [9,10,11,12,13,14,15,16,17,19,21,23,25,29,31,35,37,41,43,47,49,53,59,61,67,71,73,79,83,89,97]
n=10: [10,11,12,13,14,15,16,17,18,19,21,23,25,27,29,31,35,37,41,43,47,49,53,59,61,67,71,73,79,83,89]
n=11: [11,12,13,14,15,16,17,18,19,20,21,23,25,27,29,31,35,37,41,43,47,49,53,59,61,67,71,73,79,83,89]
n=12: [12,13,14,15,16,17,18,19,20,21,22,23,25,27,29,31,33,35,37,41,43,47,49,53,55,59,61,67,71,73,77]

4
n=6, a=15पहला दिलचस्प परीक्षण मामला है।
नील

6
यह पहला स्थान है जहाँ गैर-पैटर्न "ए-एन-प्राइम इफ़ एन एन ए <2 एन या (ए 2 एन और ए प्राइम है)" टूट जाता है।
मीशा लावरोव

2
"2 से बड़ी संख्याएं अभाज्य हैं यदि वे छोटे प्राइम द्वारा विभाज्य नहीं हैं।" - यह परिभाषा किसी भी संख्या को प्रधान होने की अनुमति देती है। हो सकता है कि आप इसके बजाय iff कहना चाहें ?

5
@ ThePirateBay शब्द का सटीक गणितीय अर्थ नहीं है अगर। मैं इसे छोड़ने जा रहा हूं।
गेहूं जादूगर

1
@JeppeStigNielsen यह साबित करना बहुत कठिन नहीं है। सभी मिश्रित संख्याएँ जो कि n- अभाज्य हैं, में केवल मुख्य कारक होने चाहिए जो n से छोटे हों। हम यह भी जानते हैं कि उनके कारकों में से किसी भी उपसमूह का उत्पाद n से बड़ा नहीं हो सकता है क्योंकि हमारी संख्या उसी से विभाज्य होगी। इस प्रकार प्रत्येक n-prime या तो 2-अभाज्य है या n से कम 2 संख्याओं का गुणनफल है। N से कम संख्या वाले युग्मों की केवल एक सीमित संख्या होती है, इस प्रकार समग्र n- अभाज्य संख्याओं की केवल एक परिमित संख्या होती है। उम्मीद है कि यह समझ में आता है, मुझे इसे एक टिप्पणी में फिट करने के लिए संक्षिप्त करना था।
गेहूं जादूगर

जवाबों:


9

हास्केल , 45 बाइट्स

n!a=not$any(n!)[x|x<-[n..a-1],mod a x<1]||n>a

इसे ऑनलाइन आज़माएं!

मैं एक अच्छा पुनरावर्ती कार्य को परिभाषित करता हूं (!):

n!aजाँच करता aहै कि रेंज में किसी भी कारक [n,a-1], एक है n-prime। फिर यह परिणाम को नकारता है। यह भी सुनिश्चित करता है किn>a



@WheatWizard मैं उम्मीद कर रहा था कि कोई व्यक्ति छोटे समाधान को पोस्ट करेगा :)
H.PWiz


4

पायथन 3 , 45 बाइट्स

lambda i,k:(i>k)<all(k%r for r in range(i,k))

इसे ऑनलाइन आज़माएं!

यह काम किस प्रकार करता है

यह दो पूर्णांक इनपुट के रूप में लेता है, i और k । अगर k ≥ i । फिर रेंज [i, k) उत्पन्न करता है और इस श्रेणी के प्रत्येक पूर्णांक N के लिए , जाँचता है कि N , k से krrime है या नहीं । यदि दोनों शर्तें पूरी होती हैं, तो k एक i -prime है।


के &बजाय andऔर के >=iबजाय आप का उपयोग नहीं कर सकते >i-1?
गेहूं जादूगर

@WheatWizard >=i अभी भी 4 बाइट्स (अंतरिक्ष के कारण) है।
नील

@ नील अगर आप को बदलने के लिए &जगह की जरूरत नहीं है।
गेहूं जादूगर


4

आर , 44 37 बाइट्स

function(a,n)a==n|a>n&all(a%%n:(a-1))

इसे ऑनलाइन आज़माएं!

-7 बाइट्स ग्यूसेप के लिए धन्यवाद

TRUEअगर लौटता है

  • aके बराबर है n( a==n|)
  • aसे अधिक है n और ( a>n&) हर नंबर के लिए कश्मीर से nकरने के लिए a-1, aसमान रूप से से विभाज्य नहीं है कश्मीर ( all(a%%n:(a-1)))

FALSEअन्यथा लौटता है


PPCG में आपका स्वागत है! शानदार पहला जवाब!
23

3

जे, 30 बाइट्स

>:*(-{1=[:+/0=[:|/~]+i.@[)^:>:

इसे ऑनलाइन आज़माएं!

मान को आरंभिक तर्क के रूप में और बाएँ तर्क पर जाँच करने के लिए मान लेता है।

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

व्याख्या

आज्ञा देना xछोड़ दिया तर्क (जाँच करने के लिए मूल्य) और yसही तर्क हो (प्रारंभिक प्रधानमंत्री)।

>:*(-{1=[:+/0=[:|/~]+i.@[)^:>:
                          ^:>:  Execute left argument if x >= y
                     i.@[         Create range [0..x]
                   ]+             Add y to it (range now: [y..x+y])
                |/~               Form table of residues
            0=                    Equate each element to 0
          +/                      Sum columns
      1=                          Equate to 1
    -{                            Take the element at position x-y
>:*                             Multiply by result of x >= y

टिप्पणियाँ

स्थिति x-yमें तत्व x(हम yमूल सीमा में जोड़ा गया है) के लिए primality परीक्षण का परिणाम है ।

इससे गुणा करने पर x >: yयह सुनिश्चित होता है कि हमें कम मूल्य के लिए एक गलत मूल्य ( 0) मिलता xहै y


3

जावास्क्रिप्ट (ईएस 6), 33 32 30 बाइट्स

करी सिंटैक्स में इनपुट लेता है (n)(a)। एक बूलियन देता है।

n=>p=(a,k=a)=>k%--a?p(a,k):a<n

डेमो


3

हास्केल , 30 बाइट्स

2 बाइट्स ने H.PWiz के विचार के लिए धन्यवाद को बचाया जो त्रुटिपूर्ण उत्तर से उधार लिया गया था

n!a=[1]==[1|0<-mod a<$>[n..a]]

इसे ऑनलाइन आज़माएं!

ठीक है क्योंकि थोड़ी देर हो गई है, और अब तक का एकमात्र हास्केल जवाब 45 बिट्स है, मैंने अपना जवाब पोस्ट करने का फैसला किया।

व्याख्या

यह फ़ंक्शन जांच के बीच ही नंबर है कि एन और एक है कि एक से विभाज्य है है एक ही।

अब परिभाषा में केवल n -प्राइम से छोटे का उल्लेख है , इसलिए हम इन सभी अतिरिक्त संख्याओं की जांच क्यों कर रहे हैं? जब हम समस्या नहीं होगा एक कुछ से विभाज्य है n से भी बड़ा -composite n ?

हम नहीं करेंगे क्योंकि अगर वहाँ एक है n बड़ा -composite से n यह एक छोटे से भाज्य होना चाहिए n -prime परिभाषा के द्वारा। इस प्रकार अगर यह विभाजित होता है तो छोटे n -प्राइम का होना चाहिए ।

यदि एक से छोटी है n [n..a] हो जाएगा []इस प्रकार के बराबर नहीं कर सकते हैं [1]की जांच को विफल कर रही।





1

डीसी , 40 34 37 बाइट्स

[0p3Q]sf?se[dler%0=f1+dle>u]sudle>u1p

मैंने एक TIO लिंक शामिल किया होगा, लेकिन TIO यह dcदेखने का दोषपूर्ण वितरण कर रहा है कि यह मेरे सिस्टम पर कैसे काम करता है, लेकिन Qकमांड गलत तरीके से TIO पर कार्य करता है। इसके बजाय, यहां bashसही ढंग से कार्य करने वाले संस्करण के साथ परीक्षण मैदान का लिंक दिया गया है dc:

यह डेमो!


1

एपीएल (डायलॉग) , 24 बाइट्स

{⍵∊o/⍨1=+/¨0=o|⍨⊂o←⍺↓⍳⍵}

इसे ऑनलाइन आज़माएं!

कैसे?

⍳⍵- 1कोa

o←⍺↓- nकरने के लिए a, को बचाने के लिएo

o|⍨⊂o- हर वस्तु के oसाथ में प्रत्येक आइटम moduloo

0=- जाँच करें कि यह कहाँ बराबर है 0(विभाजित)

+/¨ - विभाजनों की संख्या का योग

1= - यदि हमारे पास केवल एक है तो संख्या केवल अपने आप से विभाजित है

o/⍨ - इसलिए हम इन घटनाओं को रखते हैं

⍵∊- aउस अवशिष्ट सरणी में है?



0

जावास्क्रिप्ट ईएस 5, 34 बाइट्स

for(a=i=(p=prompt)();a%--i;);i<p()

0

++ , 20 बाइट्स जोड़ें

L,2Dx@rBcB%B]b*!!A>*

इसे ऑनलाइन आज़माएं!

L,   - Create a lambda function
     - Example arguments:  [5 9]
  2D - Copy below; STACK = [5 9 5]
  x  - Repeat;     STACK = [5 9 [9 9 9 9 9]]
  @  - Reverse;    STACK = [[9 9 9 9 9] 5 19] 
  r  - Range;      STACK = [[9 9 9 9 9] [5 6 7 8 9]]
  Bc - Zip;        STACK = [[9 5] [9 6] [9 7] [9 8] [9 9]]
  B% - Modulo;     STACK = [4 3 2 1]
  B] - Wrap;       STACK = [[4 3 2 1]]
  b* - Product;    STACK = [24]
  !! - Boolean;    STACK = [1]
  A  - Arguments;  STACK = [1 5 9]
  >  - Greater;    STACK = [1 1]
  *  - Product;    STACK = [1]
हमारी साइट का प्रयोग करके, आप स्वीकार करते हैं कि आपने हमारी Cookie Policy और निजता नीति को पढ़ और समझा लिया है।
Licensed under cc by-sa 3.0 with attribution required.