क्यूबाई प्रिम्स


20

एक प्राकृतिक संख्या को देखते हुए , - cuban prime को वापस करें ।nn

क्यूबाई प्रिम्स

क्यूबाई प्राइम फॉर्म की एक प्रमुख संख्या है

p=x3y3xy

जहां और याy>0x=1+yx=2+y

विवरण

  • आप 0 या 1 आधारित अनुक्रमण का उपयोग कर सकते हैं, जो भी आपको सबसे अच्छा लगता है।
  • आप इंडेक्स या पहले primes दिए गए -th प्राइम को बढ़ते हुए क्रम में वापस कर सकते हैं, या वैकल्पिक रूप से आप एक अनंत सूची / जनरेटर लौटा सकते हैं जो बढ़ते हुए क्रम में primes उत्पन्न करता है।nnn

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

पहले कुछ शब्द निम्नलिखित हैं:

(#1-13)   7, 13, 19, 37, 61, 109, 127, 193, 271, 331, 397, 433, 547,
(#14-24) 631, 769, 919, 1201, 1453, 1657, 1801, 1951, 2029, 2269, 2437,
(#25-34) 2791, 3169, 3469, 3571, 3889, 4219, 4447, 4801, 5167, 5419,
(#35-43) 6211, 7057, 7351, 8269, 9241, 10093, 10267, 11719, 12097,
(#44-52) 12289, 13267, 13669, 13873, 16651, 18253, 19441, 19927, 20173

OEIS पर अधिक शब्द पाए जा सकते हैं: वे दो क्रमों में विभाजित होते हैं, जो कि wheter या पर निर्भर करता है : A002407 और A002648x=1+yx=2+y


2
क्या हम छंटे हुए पहले n primes को वापस नहीं कर सकते?
J42161217

@ J42161217 नहीं, अपराध बढ़ते क्रम में होने चाहिए।
दोष

जवाबों:


23

जावास्क्रिप्ट (V8) , 54 बाइट्स

एक पूर्ण कार्यक्रम जो क्यूबा के प्रिंटों को हमेशा के लिए प्रिंट करता है।

for(x=0;;){for(k=N=~(3/4*++x*x);N%++k;);~k||print(-N)}

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

एनबी: जब तक आपके पास अपने प्रिंटर में अनंत पेपर नहीं है , तब तक इसे अपने ब्राउज़र कंसोल में चलाने का प्रयास न करें , जहां print()एक अलग अर्थ हो सकता है।


जावास्क्रिप्ट (ईएस 6),  63 61 60  59 बाइट्स

-क्यूबन प्राइम, 1-अनुक्रमित लौटाता है।n

f=(n,x)=>(p=k=>N%++k?p(k):n-=!~k)(N=~(3/4*x*x))?f(n,-~x):-N

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

कैसे?

यह इस तथ्य पर आधारित है कि क्यूबा के प्राइम्स फॉर्म के प्राइम हैं:

pn=3n24+1,n3

उपरोक्त सूत्र को इस प्रकार लिखा जा सकता है:

pn={3n2+14 if n is odd3n2+44 if n is even

या किसी भी :y>0

p2y+1=3(2y+1)2+14=3y2+3y+1
p2y+2=3(2y+2)2+44=3y2+6y+4

जो है के लिए और क्रमशः।x3y3xyx=y+1x=y+2


7

05AB1E , 16 12 9 बाइट्स

एक अनंत सूची बनाता है। केविन क्रूज़सेन के पोर्ट ऑफ अरनॉल्ड्स सूत्र के
साथ 4 बाइट्स सहेजे गए । ग्रेमी की बदौलत एक और 3 बाइट्स बचाए

∞n3*4÷>ʒp

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

व्याख्या

∞          # on the list of infinite positive integers
 n3*4÷>    # calculate (3*N^2)//4+1 for each
       ʒp  # and filter to only keep primes

आपने अपने स्पष्टीकरण में एक टाइपो बनाया है: " स्टैक पर एक कॉपी डालेंN^2+3 " होना चाहिए 3*N^2। इसके अलावा, इसके )बजाय क्यों ¯? क्योंकि टाइप करना आसान है? और किसी कारण से मुझे लग रहा है कि NnN‚3*¬sO‚1 बाइट कम हो सकती है, लेकिन मैं इसे नहीं देख रहा हूं। एक मामूली बराबर-बाइट विकल्प है Nn3*DN3*+‚। लेकिन मैं शायद सिर्फ उन चीजों को देख रहा हूं जो वहां नहीं हैं ..;) अच्छा जवाब, तो मुझसे +1।
केविन क्रूज़सेन

1
मैंने वास्तव में अपने उत्तर को 05AB1E पर पोर्ट करने की कोशिश की, लेकिन बुरी तरह विफल रहा। : डी
Arnauld

1
वास्तव में, एक अनंत सूची बनाना अधिक सुविधाजनक है: withn3 * 4 an> ʒp
Grimmy

1
ठीक है, मैं उस विरोधाभास का उपयोग खुद करने के लिए नहीं कर रहा हूँ। :-)
WGroleau

6
@Groleau मुझे लगता है कि आपने कभी पेशेवर रूप से सॉफ्टवेयर विकसित नहीं किया है। जब मुझे चश्मा मिलता है तो मैं अधिक चिंतित होता हूं जो खुद से विरोधाभास नहीं करता है।
माइकइलियार

7

आर , 75 73 बाइट्स

n=scan()
while(F<n)F=F+any(!(((T<-T+1)*1:4-1)/3)^.5%%1)*all(T%%(3:T-1))
T

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

-2 बाइट्स जो यह देखते हुए कि मैं (विभिन्न पूर्वता) के *बजाय यदि मैं उपयोग करता हूं तो कोष्ठक हटा सकता हूं &

nवें क्यूबा प्राइम (1-अनुक्रमित) को आउटपुट करता है ।

यह इस तथ्य (OEIS में दिए गए) का उपयोग करता है कि क्यूबन प्राइम्स फॉर्म या लिए कुछ , यानी या पूर्णांक है ।p=1+3n24p=1+3n2nn=ap13a=1a=4

ट्रिक यह है कि कोई भी प्राइम फॉर्म या (*) का नहीं हो सकता है, इसलिए हम में फॉर्मूला चेक करके 2 बाइट्स बचा सकते हैं ( ) के बजाय ( ) में।2p=1+3n23p=1+3n2a{1,2,3,4}1:4a{1,4}c(1,4)

थोड़ा कोड के ungolfed संस्करण:

# F and T are implicitly initialized at 0 and 1
# F is number of Cuban primes found so far
# T is number currently being tested for being a Cuban prime
n = scan()                       # input
while(F<n){
  T = T+1                        # increment T 
  F = F +                        # increment F if
    (!all(((T*1:4-1)/3)^.5 %% 1) # there is an integer of the form sqrt(((T*a)-1)/3)
     & all(T%%(3:T-1)))          # and T is prime (not divisible by any number between 2 and T-1)
  }
T                                # output T

(*) कोई भी प्रधान , विभाज्य होगा ।3p=1+3n21=3(pn2)3

(जो कि क्यूबा प्रधान नहीं है) के अलावा कोई भी प्रधान नहीं हो सकता है फॉर्म : को विषम होना चाहिए, अर्थात । विस्तार , इसलिए और भी होगा।p=22p=1+3n2nn=2k+12p=4+12k(k+1)p=2+6k(k+1)p


एनएच क्यूब प्राइम पर एक ऊपरी बाध्य का उपयोग करके लूप से बचने के बारे में क्या?
शीआन

@ शीआन मैंने उस बारे में सोचा था, लेकिन इस तरह के बंधन के साथ नहीं आ सका। क्या तुम्हारे पास एक है?
रॉबिन राइडर

5

वोल्फ्राम लैंग्वेज (गणितज्ञ) , 66 65 56 बाइट्स

(f=1+⌊3#/4#⌋&;For[n=i=0,i<#,PrimeQ@f@++n&&i++];f@n)&

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

  • J42161217 -1 के⌊ ⌋ बजाय का उपयोग करकेFloor[ ]

  • attinat

    • के⌊3#/4#⌋ बजाय का उपयोग करके -1⌊3#^2/4⌋
    • के For[n=i=0,i<#,PrimeQ@f@++n&&i++]बजाय -8 के लिएn=2;i=#;While[i>0,i-=Boole@PrimeQ@f@++n]

1
65 बाइट्स । Ppcg में आपका स्वागत है। अच्छा पहला जवाब! +1
J42161217

धन्यवाद! (लंबे समय तक दुबकने वाला।) मैं आपके मौजूदा उत्तर को बहुत कम नहीं कर सकता था इसलिए मैंने अपना लिखा और यह थोड़ा कम निकला। मैं एक पायथन भी कर सकता हूं।
स्पीडस्टाइल


@attinat मुझे लगा कि अरनॉल्ड का सूत्र केवल n> 2 के लिए काम करता है इसलिए मैंने 0 से शुरुआत नहीं की - हालाँकि आपके उदाहरण में यह सभी n के लिए काम करता है (क्योंकि यह 1 1 4 7 13 से शुरू होता है ... इसलिए प्राइम्स 7 13 हैं। ..)
स्पीडस्टाइल

3

जावा 8, 94 88 86 84 बाइट्स

v->{for(int i=3,n,x;;System.out.print(x<1?++n+" ":""))for(x=n=i*i++*3/4;~n%x--<0;);}

@SaraJ के जावा प्राइम-चेकर का उपयोग करके -6 बाइट्स , इसलिए उसे सुनिश्चित करना सुनिश्चित करें!
-2 बाइट्स @ OlivierGrégoire की बदौलत । चूंकि हमारा पहला नंबर है 7, हम %nसारा के प्राइम-चेकर से ट्रेलिंग को छोड़ सकते हैं , जो कि लूप को समाप्त करना है n=1
-2 बाइट्स धन्यवाद @ ओलिवियरग्रीगोयर द्वारा @Arnauld का उत्तर पोर्ट करके

स्थान-सीमांकित आउटपुट को अनिश्चित काल के लिए।

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

स्पष्टीकरण (पुराने 86 बाइट्स संस्करण का): TODO: अपडेट स्पष्टीकरण

pn=3n24+1,n3

v->{                     // Method with empty unused parameter and no return-type
  for(int i=3,           //  Loop-integer, starting at 3
          n,x            //  Temp integers
      ;                  //  Loop indefinitely:
      ;                  //    After every iteration:
       System.out.print( //     Print:
        n==x?            //      If `n` equals `x`, which means `n` is a prime:
         n+" "           //       Print `n` with a space delimiter
        :                //      Else:
         ""))            //       Print nothing
    for(n=i*i++*3/4+1,   //   Set `n` to `(3*i^2)//4+1
                         //   (and increase `i` by 1 afterwards with `i++`)
        x=1;             //   Set `x` to 1
        n%++x            //   Loop as long as `n` modulo `x+1`
                         //   (after we've first increased `x` by 1 with `++x`)
             >0;);}      //   is not 0 yet
                         //   (if `n` is equal to `x`, it means it's a prime)

मुझे नहीं लगता कि वास्तव में यह संभव है, लेकिन क्यूबा के लोगों को खोजने का एक और तरीका इस सूत्र का उपयोग करता है: v->{for(int n=7,i=3,p,x,d,r=0;;i+=++r%2*3,n+=i,System.out.print(x>1?x+" ":""))for(x=n,d=1;++d<n;x=x%d<1?0:n);}हो सकता है कि कोई इसे गोल्फ के लिए उपयोग कर सकता है? मैं नहीं कर सका।
ओलिवियर ग्रेजायर

1
@ OlivierGrégoire आप अप्रयुक्त को हटाने ,pऔर बदलने के i+=++r%2*3,n+=iलिए आपको थोड़ा और अधिक गोल्फ कर सकते हैं n+=i+=++r%2*3, लेकिन फिर मैं अभी भी 106 बाइट्स समाप्त करूंगा। जावा 11 का String#repeatप्राइम-रेगेक्स के साथ उपयोग करना 105 बाइट्स है v->{for(int n=7,i=3,r=0;;n+=i+=++r%2*3)if(!"x".repeat(n).matches(".?|(..+?)\\1+"))System.out.println(n);}:।
केविन क्रूज़सेन

हाँ, मैंने अनुमान लगाया कि यह मेरी (अब स्पष्ट) गलतियों के बावजूद बहुत गोल्फ नहीं था। इसे एक सवारी देने के लिए धन्यवाद;)
ओलिवियर ग्रेजायर

@ OlivierGrégoire शायद आपके लिए भी जानना अच्छा है, लेकिन जावा में जाहिरा तौर पर एक छोटा प्राइम-चेक लूप है। मेरा संपादन और साराज का प्रधान-जाँच उत्तर देखें।
केविन क्रूज़सेन

मैं गलत हो सकता हूं, लेकिन अंतिम %nकी आवश्यकता नहीं है, क्या यह है?
ओलिवियर ग्रेजायर



1

वोल्फ्राम भाषा (गणितज्ञ) , 83 बाइट्स

यह समाधान n-th क्यूबा प्राइम को तेजी से जोड़े जाने और पिछले सभी परिणामों को याद रखने के फायदों के साथ आउटपुट करेगा।

(d:=1+3y(c=1+y)+3b c;e:=If[PrimeQ@d,n++;f@n=d];For[n=y=b=0,n<#,e;b=1-b;e,y++];f@#)&

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


1

व्हॉट्सएप , 180 बाइट्स

[S S S T    S N
_Push_2][S N
S _Duplicate][N
S S N
_Create_Label_OUTER_LOOP][S N
N
_Discard_top_stack][S S S T N
_Push_1][T  S S S _Add][S N
S _Duplicate][S N
S _Duplicate][T S S N
_Multiply][S S S T  T   N
_Push_3][T  S S N
_Multiply][S S S T  S S N
_Push_4][T  S T S _Integer_divide][S S S T  N
_Push_1][T  S S S _Add][S S S T N
_Push_1][S N
S _Duplicate_1][N
S S S N
_Create_Label_INNER_LOOP][S N
N
_Discard_top_stack][S S S T N
_Push_1][T  S S S _Add][S N
S _Duplicate][S N
S _Duplicate][S T   S S T   T   N
_Copy_0-based_3rd][T    S S T   _Subtract][N
T   S T N
_Jump_to_Label_PRINT_if_0][S T  S S T   S N
_Copy_0-based_2nd][S N
T   _Swap_top_two][T    S T T   _Modulo][S N
S _Duplicate][N
T   S S S N
_Jump_to_Label_FALSE_if_0][N
S N
S N
_Jump_to_Label_INNER_LOOP][N
S S T   N
_Create_Label_PRINT][T  N
S T _Print_as_integer][S S S T  S T S N
_Push_10_(newline)][T   N
S S _Print_as_character][S N
S _Duplicate][N
S S S S N
_Create_Label_FALSE][S N
N
_Discard_top_stack][S N
N
_Discard_top_stack][N
S N
N
_Jump_to_Label_OUTER_LOOP]

पत्र S(स्थान), T(टैब), और N(नई-पंक्ति) केवल हाइलाइटिंग के रूप में जोड़े गए।
[..._some_action]केवल स्पष्टीकरण के रूप में जोड़ा गया।

आउटपुट न्यूलाइन-सीमांकित अनिश्चित काल तक।

इसे ऑनलाइन आज़माएं (कच्चे स्थान, टैब और नई-नई लाइनों के साथ)।

छद्म कोड में स्पष्टीकरण:

pn=3n24+1,n3

Integer i = 2
Start OUTER_LOOP:
  i = i + 1
  Integer n = i*i*3//4+1
  Integer x = 1
  Start INNER_LOOP:
    x = x + 1
    If(x == n):
      Call function PRINT
    If(n % x == 0):
      Go to next iteration of OUTER_LOOP
    Go to next iteration of INNER_LOOP

function PRINT:
  Print integer n
  Print character '\n'
  Go to next iteration of OUTER_LOOP

1

पायथन 3 , 110 108 102 बाइट्स

इस गणितीय प्रधान चेकर का उपयोग करके और एक अनाम अनंत जनरेटर को वापस करने के लिए मेरे गणितज्ञ उत्तर (यानी isPrime(1+⌊¾n²⌋) else n++) के समान विधि

from itertools import*
(x for x in map(lambda n:1+3*n**2//4,count(2)) if all(x%j for j in range(2,x)))

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

  • mypetlion -2 क्योंकि यकीनन अनाम जनरेटर की तुलना में नामांकित लोगों की अनुमति है
  • -6count को 2 +1 से शुरू करते हुए , ताकि and x>1मेरे द्वारा लिए गए प्राइम चेकर में अनावश्यक -7 हो

एक चर में जाने वाले उत्तर को आमतौर पर "आउटपुट" का वैध रूप नहीं माना जाता है। क्या आप अपने उत्तर को फिर से बना सकते हैं ताकि परिणाम या तो स्टडआउट करने के लिए आउटपुट हो या किसी फ़ंक्शन द्वारा लौटाया जाए?
mypetlion

1
चूंकि अनाम फ़ंक्शंस की अनुमति है, और चुनौती स्पष्ट रूप से एक अनंत जनरेटर की अनुमति देती है, मैंने हटा दिया है g=। मैंने इसे केवल पहली जगह में शामिल किया था क्योंकि इसने TIO पर त्वरित दृश्य की अनुमति दी थी print(next(g) for i in range(52))
स्पीडस्टाइल

1

जाप , 14 13 बाइट्स

अर्नुलद के सूत्र से अनुकूलित । 1 अनुक्रमित।

@µXj}f@Ò(X²*¾

कोशिश करो

1 बाइट ने EmbodimentOfIgnorance को धन्यवाद दिया।


13 बाइट्स? हालांकि पूरी तरह से परीक्षण नहीं किया गया।
अज्ञान का अवतार

धन्यवाद, @EmbodimentofIgnorance मैंने कोशिश की थी लेकिन यह काम नहीं किया; मैं बाहर भूल गया हूँ (
झबरा

1

रैकेट , 124 बाइट्स

(require math)(define(f n[i 3])(let([t(+(exact-floor(* 3/4 i i))1)][k(+ 1 i)])(if(prime? t)(if(= 0 n)t(f(- n 1)k))(f n k))))

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

0-अनुक्रमित, एन-वें क्यूबन प्राइम को लौटाता है।

@ अरनॉल्ड्स जावास्क्रिप्ट उत्तर के सूत्र का उपयोग करता है


1

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

क्यूबाई अपराधों को हमेशा के लिए छाप देता है।

P=k=1
while 1:P*=k*k;x=k;k+=1;P%k>0==((x/3)**.5%1)*((x/3+.25)**.5%1-.5)and print(k)

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

x=1+yx=2+y

p=(1+y)3y3(1+y)y=1+3y+3y2y=12±14+p13

p=(2+y)3y3(1+y)y=4+6y+3y2y=1±p13
y±1


1

पर्ल 6 , 33 31 बाइट्स

-2 बाइट्स ग्रिम के लिए धन्यवाद

{grep &is-prime,1+|¾*$++²xx*}

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

अनाम कोड ब्लॉक, जो क्यूबा की primes की एक आलसी अनंत सूची देता है। यह संभव क्यूबाई अपराधों को उत्पन्न करने के लिए, फिर उन्हें फ़िल्टर करने के लिए अरनॉल्ड के सूत्र का उपयोग करता &is-primeहै।

स्पष्टीकरण:

{                           }  # Anonymous code block
 grep &is-prime,               # Filter the primes from
                         xx*   # The infinite list
                   ¾*          # Of three quarters
                     $++²      # Of an increasing number squared
                1+|            # Add one by ORing with 1

1
1+0+|बस हो सकता है1+|
ग्रैमी


0

एपीएल (एनएआरएस), 98 चार्ट, 196 बाइट्स

r←h w;y;c;v
r←c←y←0⋄→4
→3×⍳∼0πv←1+3×y×1+y+←1⋄r←v⋄→0×⍳w≤c+←1
→2×⍳∼0πv+←3×y+1⋄c+←1⋄r←v
→2×⍳w>c

इंडेंटेड:

r←h w;y;c;v
r←c←y←0⋄→4
    →3×⍳∼0πv←1+3×y×1+y+←1⋄r←v⋄→0×⍳w≤c+←1
    →2×⍳∼0πv+←3×y+1⋄c+←1⋄r←v
    →2×⍳w>c

परीक्षा:

  h ¨1..20
7 13 19 37 61 109 127 193 271 331 397 433 547 631 769 919 1201 1453 1657 1801 
  h 1000
25789873
  h 10000
4765143511

यह पर आधारित है: यदि y में N, एक संभावित क्यूबा प्रधान है

S1=1+3y(y+1)

अगला संभावित क्यूबा प्रधान होगा

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