কিউবার পুরষ্কার


20

একটি প্রাকৃতিক নম্বর দেওয়া n ফিরে n -th কিউবার প্রধানমন্ত্রী

কিউবার পুরষ্কার

কিউবান প্রাইম হ'ল ফর্মের প্রাথমিক সংখ্যা

p=x3y3xy

যেখানে y>0 এবং x=1+y বা x=2+y

বিস্তারিত

  • আপনি 0 বা 1 ভিত্তিক সূচক ব্যবহার করতে পারেন, আপনার পক্ষে সবচেয়ে উপযুক্ত।
  • সূচক এন বা প্রথম এন প্রাইমগুলি ক্রমবর্ধমান ক্রমে প্রদত্ত n তম প্রাইমকে ফেরত দিতে পারেন , অথবা বিকল্পভাবে আপনি অসীম তালিকা / জেনারেটরটি ফিরিয়ে দিতে পারেন যা ক্রমবর্ধমান ক্রমে প্রাইমগুলি উত্পাদন করে।nn

পরীক্ষার মামলা

প্রথম কয়েকটি শর্ত নিম্নলিখিত:

(#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- এ আরও শর্তাবলী পাওয়া যাবে: x=1+y বা x=2+y : A002407 এবং A002648 এর উপর ভিত্তি করে এগুলি দুটি ক্রমে বিভক্ত হয়েছে


2
বাছাই না করা আমরা কী প্রথম এন প্রাইমগুলি ফিরিয়ে দিতে পারি?
J42161217

@ J42161217 না, প্রাইমগুলি ক্রমবর্ধমান ক্রমে হওয়া উচিত।
flawr

উত্তর:


23

জাভাস্ক্রিপ্ট (ভি 8) , 54 বাইট

একটি সম্পূর্ণ প্রোগ্রাম যা চিরকালের জন্য কিউবান প্রাইমগুলি মুদ্রণ করে।

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

এটি অনলাইন চেষ্টা করুন!

নোট: আপনার প্রিন্টারে আপনার অসীম কাগজ না থাকলে এটি আপনার ব্রাউজার কনসোলে চালানোর চেষ্টা করবেন না , যেখানে এর print()অন্য অর্থ হতে পারে।


জাভাস্ক্রিপ্ট (ES6),  63 61 60  59 বাইট

রিটার্নস n -th কিউবার প্রধানমন্ত্রী, 1-ইন্ডেক্স।

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

যা x3y3xy জন্যx=y+1এবংx=y+2যথাক্রমে।


7

05 এ বি 1 ই , 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 এর কাছে পোর্ট করার চেষ্টা করেছি, তবে খারাপভাবে ব্যর্থ হয়েছি। : ডি
আরনাউল্ড

1
আসলে, অসীম তালিকা উৎপাদিত আরও বেশি সুবিধাজনক হল: 9 বাইট ∞n3 * 4 ÷> ʒp
Grimmy

1
ঠিক আছে, আমি এমন চশমাগুলিতে অভ্যস্ত নই যা তাদের বিপরীতে। :-)
ডাব্লুগ্রোলাও

6
@ ডাব্লুগ্রোলাউ আমি ধরে নিয়েছি আপনি তখন পেশাদারভাবে কোনও সফ্টওয়্যার তৈরি করেননি। যখন আমি চশমাগুলি পাই যা তাদের বিপরীতে না আসে তখন আমি বেশি উদ্বিগ্ন ।
মাইক দ্য লাইয়ার

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 বাইটগুলি লক্ষ্য করে যে আমি যদি (বিভিন্ন নজির) *পরিবর্তে ব্যবহার করি তবে আমি বন্ধনীগুলি সরিয়ে ফেলতে পারি &

আউটপুট nth Cuban prime (1-indexed).

এটি সত্য (ওইআইএসে দেওয়া) ব্যবহার করে যে কিউবার প্রাইমগুলি ফর্মের রয়েছেপি=1+ +3এন24পি=1+ +3এন2 for some এন, i.e. এন=একটিপি-13 is an integer for একটি=1 or একটি=4.

2পি=1+ +3এন23পি=1+ +3এন2a{1,2,3,4} (1:4) instead of a{1,4} (c(1,4)).

Slightly ungolfed version of the code:

# 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

(*) No prime can be of the form 3p=1+3n2, else 1=3(pn2) would be divisible by 3.

No prime other than p=2 (which isn't a Cuban prime) can of the form 2p=1+3n2: n would need to be odd, i.e. n=2k+1. Expanding gives 2p=4+12k(k+1), hence p=2+6k(k+1) and p would be even.


what about avoiding a loop by using an upper bound on the nth Cuban prime?
Xi'an

@Xi'an I thought about that, but couldn't come up with such a bound. Do you have one?
Robin Ryder

5

Wolfram Language (Mathematica), 66 65 56 bytes

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

Try it online!

  • J42161217 -1 by using ⌊ ⌋ instead of Floor[ ]

  • attinat

    • -1 by using ⌊3#/4#⌋ instead of ⌊3#^2/4⌋
    • -8 for For[n=i=0,i<#,PrimeQ@f@++n&&i++] instead of n=2;i=#;While[i>0,i-=Boole@PrimeQ@f@++n]

1
65 bytes. Welcome to ppcg. Nice first answer! +1
J42161217

Thanks! (Long time lurker.) I couldn't quite parse your existing answer so I wrote my own and it came out a little shorter. I might do a Python one too.
speedstyle


@attinat I thought Arnauld's formula only worked for n>2 so I didn't start with 0 - although as in your example it works for all n (because it starts 1 1 4 7 13 ... so the primes are 7 13 ...)
speedstyle

3

Java 8, 94 88 86 84 bytes

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

-6 bytes by using the Java prime-checker of @SaraJ, so make sure to upvote her!
-2 bytes thanks to @OlivierGrégoire. Since the first number we check is 7, we can drop the trailing %n from Sara's prime-checker, which is to terminate the loop for n=1.
-2 bytes thanks to @OlivierGrégoire by porting @Arnauld's answer.

Outputs space-delimited indefinitely.

Try it online.

Explanation (of the old 86 bytes version): TODO: Update explanation

Uses the formula of @Arnauld's JavaScript answer: 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)

I don't really think it's feasible, but another way of finding the cuban primes uses this formula: 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);}, maybe someone can use this to golf? I couldn't.
Olivier Grégoire

1
@OlivierGrégoire You can golf yours a bit more by removing the unused ,p and changing i+=++r%2*3,n+=i to n+=i+=++r%2*3, but then I'll still end up at 106 bytes. Using Java 11's String#repeat with prime-regex is 105 bytes: v->{for(int n=7,i=3,r=0;;n+=i+=++r%2*3)if(!"x".repeat(n).matches(".?|(..+?)\\1+"))System.out.println(n);}.
Kevin Cruijssen

Yeah, I guessed it wasn't much golfable despite my (now obvious) mistakes. Thanks for giving it a ride ;)
Olivier Grégoire

@OlivierGrégoire Maybe also good to know for you, but there is apparently a shorter prime-check loop in Java. See my edit and SaraJ's prime-check answer.
Kevin Cruijssen

I might be wrong, but the last %n isn't required, is it?
Olivier Grégoire



1

ওল্ফ্রাম ভাষা (ম্যাথমেটিকা) , 83 বাইট

এই দ্রষ্টব্যটি দ্রুত হওয়ার এবং এফ চিহ্নের সমস্ত পূর্ববর্তী ফলাফলগুলি স্মরণে রাখার অতিরিক্ত সুবিধাসমূহের সাথে এন-তম কিউবার প্রধানমন্ত্রীকে আউটপুট দেবে।

(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

Whitespace, 180 bytes

[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]শুধুমাত্র ব্যাখ্যা হিসাবে যুক্ত।

অনির্দিষ্টকালের জন্য নিউলাইন-সীমাবদ্ধ আউটপুটগুলি।

এটি অনলাইনে চেষ্টা করুন (কেবলমাত্র কাঁচা জায়গা, ট্যাব এবং নতুন লাইনের সাহায্যে)।

সিউডো-কোডে ব্যাখ্যা:

আমার জাভা 8 উত্তরটির পোর্ট , যা @ আর্নল্ডের জাভাস্ক্রিপ্ট উত্তর থেকে সূত্রটিও ব্যবহার করে :পিএন=3এন24+ +1,এন3

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)))

এটি অনলাইন চেষ্টা করুন!

  • মাইপিটলিয়ন -২ কারণ যুক্তিযুক্ত বেনামে জেনারেটর নামযুক্ত ব্যক্তির চেয়ে বেশি অনুমোদিত
  • -6count 2 +1 থেকে শুরু করে যাতে and x>1আমি যে প্রাইম চেকার ধার করেছিলাম তা অপ্রয়োজনীয় -7

কোনও চলকটিতে যাওয়া উত্তরটি সাধারণত "আউটপুট" এর বৈধ রূপ হিসাবে বিবেচিত হয় না। আপনি কি নিজের উত্তরটি পুনরায় কাজ করতে পারবেন যাতে ফলাফলটি হয় স্টাডআউটে আউটপুট হয় বা কোনও ফাংশন দিয়ে ফিরে আসে?
মাইপেটলিয়ন

1
যেহেতু বেনাম ফাংশনগুলি অনুমোদিত, এবং চ্যালেঞ্জটি স্পষ্টভাবে একটি অসীম জেনারেটরের অনুমতি দেয়, তাই আমি সরিয়ে ফেলেছি g=। আমি কেবল এটি প্রথম স্থানে অন্তর্ভুক্ত করেছিলাম কারণ এটি দিয়ে টিআইও-তে একটি চাক্ষুষ দর্শনের অনুমতি দেওয়া হয়েছিল print(next(g) for i in range(52))
স্পিড স্টাইল

1

জাপট , 14 13 বাইট

আরনাউল্ডের সূত্র থেকে অভিযোজিত । 1-ইন্ডেক্স।

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

চেষ্টা করে দেখুন

এম্বোডিমেন্টঅফিজ্যান্সকে 1 বাইট সংরক্ষণ করা হয়েছে।


13 বাইট? যদিও পুরোপুরি পরীক্ষা করা হয়নি।
অজ্ঞতার প্রতিমূর্তি

ধন্যবাদ, @ এম্বোডিমেন্টফজ্ঞান আমি চেষ্টা করেছিলাম কিন্তু কাজ হয়নি; আমি ভুলে গিয়েছিলাম (
শেগি

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)

এটি অনলাইন চেষ্টা করুন!

এই প্রধান জেনারেটরের উপর ভিত্তি করে । প্রতিটি প্রধানমন্ত্রীর জন্য এটি পরীক্ষা করে যে কোনও পূর্ণসংখ্যা y উপস্থিত রয়েছে যা উভয়েরই সমীকরণটি পূরণ করেএক্স=1+ +Y অথবা এক্স=2+ +Y

পি=(1+ +Y)3-Y3(1+ +Y)-Y=1+ +3Y+ +3Y2Y=-12±14+ +পি-13

পি=(2+ +Y)3-Y3(1+ +Y)-Y=4+ +6Y+ +3Y2Y=-1±পি-13
যেহেতু আমরা কেবল যত্ন নিই Y একটি পূর্ণসংখ্যার সমাধান আছে, আমরা এটিকে অগ্রাহ্য করতে পারি ± এবং -1


1

পার্ল 6 , 33 31 বাইট

-২ বাইট ধন্যবাদ গ্রিমিকে

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

এটি অনলাইন চেষ্টা করুন!

অজ্ঞাতনামা কোড ব্লক যা কিউবার প্রাইমগুলির একটি অলস অসীম তালিকা প্রদান করে। এটি সম্ভাব্য কিউবান প্রাইমগুলি তৈরি করতে, তারপরে সেগুলি ফিল্টার করার জন্য আরনাউল্ডের সূত্র ব্যবহার &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
আমাদের সাইট ব্যবহার করে, আপনি স্বীকার করেছেন যে আপনি আমাদের কুকি নীতি এবং গোপনীয়তা নীতিটি পড়েছেন এবং বুঝতে পেরেছেন ।
Licensed under cc by-sa 3.0 with attribution required.