এটি কি প্রথম সংখ্যা?


37

ফ্রান্সোইস প্রোথের নামানুসারে একটি প্রথম সংখ্যা , এমন একটি সংখ্যা যা প্রকাশ করা যেতে পারে

N = k * 2^n + 1

কোথায় kএকটি বিজোড় পূর্ণসংখ্যা ইতিবাচক এবং nএকটি ধনাত্মক পূর্ণসংখ্যা যেমন যে হয় 2^n > k। এর আরও একটি দৃ concrete় উদাহরণ ব্যবহার করা যাক। 3 নিন 3 একটি প্রথম সংখ্যা কারণ এটি হিসাবে লেখা যেতে পারে

(1 * 2^1) + 1

এবং 2^1 > 1সন্তুষ্ট 5 এটি একটি প্রথম সংখ্যা কারণ এটি হিসাবে লেখা যেতে পারে

(1 * 2^2) + 1

এবং 2^2 > 1সন্তুষ্ট যাইহোক, 7 না একটি Proth সংখ্যা কারণ একমাত্র উপায় আকারে এটা লিখতে N = k * 2^n + 1হয়

(3 * 2^1) + 1

এবং 2^1 > 3সন্তুষ্ট হয় না।

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

পরীক্ষা IO

এখানে 1000 পর্যন্ত প্রথম 46 সংখ্যা রয়েছে। ( A080075 )

3, 5, 9, 13, 17, 25, 33, 41, 49, 57, 65, 81, 97, 113, 129, 145, 161, 177, 193, 209, 225, 241, 257, 289, 321, 353, 385, 417, 449, 481, 513, 545, 577, 609, 641, 673, 705, 737, 769, 801, 833, 865, 897, 929, 961, 993

অন্যান্য প্রতিটি বৈধ ইনপুট একটি মিথ্যা মান দিতে হবে।

যথারীতি, এটি কোড-গল্ফ, সুতরাং মানক লুফোলগুলি প্রয়োগ হয় এবং বাইটের মধ্যে সংক্ষিপ্ত উত্তরটি জিততে পারে!


সংখ্যা তত্ত্ব মজা-সত্য পার্শ্ব-নোট:

মার্সেন প্রাইম নয় এমন সর্বাধিক পরিচিত প্রাইম হ'ল 19249 * 2^13018586 + 1, এটি ঠিক প্রথম সংখ্যার হিসাবেও ঘটে!

উত্তর:


41

জেলি , 5 বাইট

’&C²>

এটি অনলাইন চেষ্টা করুন! বা সমস্ত পরীক্ষার কেস যাচাই করুন

পটভূমি

যাক একটি কঠোরভাবে ধনাত্মক পূর্ণসংখ্যা হতে। ঞ + 1 টি টগল সব trailing সেট বিট এবং সংলগ্ন সেট না বিট। উদাহরণস্বরূপ, 10011 2 + 1 = 10100 2

যেহেতু ~ ঞ = - (ঞ + 1 টি) = -J - 1 , -J = ~ ঞ + 1 টি , তাই -n না, bitwise উপরে প্রযোজ্য (যা টগল সব বিট), এইভাবে গত সামনে সমস্ত বিট টগল করানোর

গ্রহণ করে জম্মু ও -J -, bitwise এবং এবং -J - আগে সব বিট এবং পরে গত সেট বিট (মধ্যে অসম থেকে বাতিল করা হয় এবং -J ), এইভাবে সর্বোচ্চ ক্ষমতা ফলনশীল 2 যে ভাগ সমানভাবে।

জন্য ইনপুট এন , আমরা উপরে প্রয়োগ করতে চান 1 - এন এটি 2 এন , সর্বোচ্চ ক্ষমতা 2 যে ভাগ 1 - এন । যদি মি = এন - 1 , -m = - (এন - 1) = 1 - এন , তাই (এন - 1) & (1 - এন) উৎপাদ 2 এন

পরীক্ষার জন্য যা যা বাকি আছে তা যদি 2 এন > কে হয় । তাহলে ট> 0 , এই সত্য যদি এবং কেবল যদি (2 এন ) 2 > K2 এন , যা সত্য নিজেই যদি এবং কেবল যদি হয় (2 এন ) 2 ≥ K2 এন + 1 টি = এন

পরিশেষে, যদি (2 এন ) 2 = এন = কে 2 এন + 1 , 2 এন অবশ্যই বিজোড় ( 1 ) হওয়া আবশ্যক যাতে উভয় পক্ষের পার্টিশন মিলতে পারে, তা বোঝায় যে কে = 0 এবং এন = 1 । এই ক্ষেত্রে (এন - 1) এবং (1 - এন) = 0 এবং 0 = 0 এবং ((এন - 1) এবং (1 - এন)) 2 = 0 <1 = এন

অতএব, ((এন - 1) এবং (1 - এন)) 2 > এন সত্য এবং যদি এন কোনও প্রথম সংখ্যা হয়।

কিভাবে এটা কাজ করে

’&C²>  Main link. Argument: N

’      Decrement; yield N - 1.
  C    Complement; yield 1 - N.
 &     Take the bitwise AND of both results.
   ²   Square the bitwise AND.
    >  Compare the square to N.

Woah। অবিশ্বাস্য thats
উজ্জ্বল ডন

46

পাইথন, 22 বাইট

lambda N:N-1&1-N>N**.5

এটি আমার জেলি উত্তর একটি বন্দর । আইডিয়নে এটি পরীক্ষা করুন ।

কিভাবে এটা কাজ করে

যাক একটি কঠোরভাবে ধনাত্মক পূর্ণসংখ্যা হতে। ঞ + 1 টি টগল সব trailing সেট বিট এবং সংলগ্ন সেট না বিট। উদাহরণস্বরূপ, 10011 2 + 1 = 10100 2

যেহেতু ~ ঞ = - (ঞ + 1 টি) = -J - 1 , -J = ~ ঞ + 1 টি , তাই -n না, bitwise উপরে প্রযোজ্য (যা টগল সব বিট), এইভাবে গত সামনে সমস্ত বিট টগল করানোর

গ্রহণ করে জম্মু ও -J -, bitwise এবং এবং -J - আগে সব বিট এবং পরে গত সেট বিট (মধ্যে অসম থেকে বাতিল করা হয় এবং -J ), এইভাবে সর্বোচ্চ ক্ষমতা ফলনশীল 2 যে ভাগ সমানভাবে।

জন্য ইনপুট এন , আমরা উপরে প্রয়োগ করতে চান 1 - এন এটি 2 এন , সর্বোচ্চ ক্ষমতা 2 যে ভাগ 1 - এন । যদি মি = এন - 1 , -m = - (এন - 1) = 1 - এন , তাই (এন - 1) & (1 - এন) উৎপাদ 2 এন

পরীক্ষার জন্য যা যা বাকি আছে তা যদি 2 এন > কে হয় । তাহলে ট> 0 , এই সত্য যদি এবং কেবল যদি (2 এন ) 2 > K2 এন , যা সত্য নিজেই যদি এবং কেবল যদি হয় (2 এন ) 2 ≥ K2 এন + 1 টি = এন

পরিশেষে, যদি (2 এন ) 2 = এন = কে 2 এন + 1 , 2 এন অবশ্যই বিজোড় ( 1 ) হওয়া আবশ্যক যাতে উভয় পক্ষের পার্টিশন মিলতে পারে, তা বোঝায় যে কে = 0 এবং এন = 1 । এই ক্ষেত্রে (এন - 1) এবং (1 - এন) = 0 এবং 0 = 0 এবং ((এন - 1) এবং (1 - এন)) 2 = 0 <1 = এন

অতএব, ((এন - 1) এবং (1 - এন)) 2 > এন সত্য এবং যদি এন কোনও প্রথম সংখ্যা হয়।

ভাসমান পয়েন্টের ভুলগুলি উপেক্ষা করা, N-1&1-N>N**.5এটি বাস্তবায়নের কোডের সমতুল্য ।


23
আমি প্রায়শই ম্যাথ.এসই করি, এবং আমার চোখগুলি 90s সাইটের মতো দেখার পরিবর্তে এই সাইটে সুন্দর ল্যাটেক্সের জন্য সত্যিই কামনা করে ...
qwr

এটি আমার প্রিয়।
কিউস


9

ম্যাথামেটিকাল, 50 48 45 40 38 35 31 29 বাইট

কোড গল্ফের কথা বিবেচিত হলে ম্যাথমেটিকা ​​সাধারণত স্তন্যপান করে, তবে কখনও কখনও এমন একটি অন্তর্নির্মিত থাকে যা জিনিসগুলিকে সত্যিই সুন্দর দেখায়।

1<#<4^IntegerExponent[#-1,2]&

একটি পরীক্ষা:

Reap[Do[If[f[i],Sow[i]],{i,1,1000}]][[2,1]]

{3, 5, 9, 13, 17, 25, 33, 41, 49, 57, 65, 81, 97, 113, 129, 145, 161, 177, 193, 209, 225, 241, 257, 289, 321, 353, 385, 417, 449, 481, 513, 545, 577, 609, 641, 673, 705, 737, 769, 801, 833, 865, 897, 929, 961, 993}

সম্পাদনা করুন: আসলে, আমি যদি ডেনিসের বিটওয়াইজ এবং ধারণাটি চুরি করি তবে আমি এটিকে 23 22 20 বাইটে নামতে পারি can

গণিত, 23 22 20 বাইট (ধন্যবাদ একটি সিমন্স )

BitAnd[#-1,1-#]^2>#&

2
প্রোগ্রামিং ধাঁধা এবং কোড গল্ফ স্বাগতম! :)
আদনান

1
শুরু করার দরকার নেই g=, একটি খাঁটি ফাংশন ঠিক আছে!
একটি সিমন্স

আহ মিষ্টি. এটি এখনই স্থির করুন।
মাইকেল লি

যাইহোক, আপনার পরীক্ষাটি উল্লেখযোগ্যভাবে সহজ করা যেতে পারে Select[Range@1000,f]
নম্বরমানিয়াক

8

05 এ বি 1 ই , 14 10 বাইট

4 বাইট সংরক্ষণের জন্য এমিগিনার ধন্যবাদ !

কোড:

<©Ó¬oD®s/›

সিপি -1222 এনকোডিং ব্যবহার করে । এটি অনলাইন চেষ্টা করুন!

ব্যাখ্যা:

ব্যাখ্যার জন্য, আসুন 241 নম্বরটি ব্যবহার করুন । আমরা প্রথমে একের সাথে সংখ্যা হ্রাস করি <240 এ ফলাফল । এখন, আমরা ব্যবহার করে প্রধান কারণগুলি (ডুপ্লিকেট সহ) গণনা করি Ò। প্রধান কারণগুলি হ'ল:

[2, 2, 2, 2, 3, 5]

আমরা তাদের দুটি ভাগে বিভক্ত করেছি। ব্যবহার করে 2Q·0K, আমরা দু'জনের তালিকা পেয়েছি:

[2, 2, 2, 2]

সহ ®2K, আমরা অবশিষ্ট সংখ্যাগুলির তালিকা পাই:

[3, 5]

অবশেষে, উভয়ের পণ্য গ্রহণ করুন। [2, 2, 2, 2]ফলাফল 1615 এর [3, 5]ফলাফলের পণ্য ।

এই পরীক্ষার কেসটি 16 > 15 সাল থেকে সত্য ।


<©Ó¬oD®s/›বা <DÓ0èoDŠ/›10 এর জন্য
এমিগিনা

@ এমিগনা এটি প্রতিভা! ধন্যবাদ :)।
আদনান

7

ব্রেন-ফ্লাক , 460 350 270 266 264 188 176 বাইট

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

({}[()])(((<>()))){{}([(((({}<(({}){})>){}){})<>[({})(())])](<>)){({}())<>}{}<>{}{}<>(({})){{}{}<>(<(())>)}{}}(<{}{}>)<>{({}[()])<>(({}()[({})])){{}(<({}({}))>)}{}<>}{}<>({}<>)

ব্যাখ্যা

এন -1 এর চেয়ে দু'জনের বৃহত্তর শক্তি না পাওয়া পর্যন্ত প্রোগ্রামটি দুটি এবং চার এর শক্তির মধ্য দিয়ে যায়। এটি যখন এটি খুঁজে পায় এটি দুটি মডুলোর সাহায্যে এন -1 এর বিভাজ্যতা পরীক্ষা করে এবং ফলাফলকে আউটপুট করে

({}[()])      #Subtract one from input
(((<>())))    #Put three ones on the other stack
{
 {}           #Pop the crap off the top
 ([(
  ((({}<(({}){})>){}){}) #Multiply the top by four and the bottom by two
  <>[({})(())])](<>)){({}())<>}{}<>{}{}<>(({})){{}{}<>(<(())>)}{} #Check if the power of four is greater than N-1
}
(<{}{}>) #Remove the power of 4
<>{({}[()])<>(({}()[({})])){{}(<({}({}))>)}{}<>}{}<>({}<{}><>) #Modulo N-1 by the power of two

এই প্রোগ্রামটি স্ট্যাক ক্লিন নয়। যদি আপনি অতিরিক্ত 4 বাইট যোগ করেন তবে আপনি এটি স্ট্যাকটি পরিষ্কার করতে পারেন:

({}[()])(((<>()))){{}([(((({}<(({}){})>){}){})<>[({})(())])](<>)){({}())<>}{}<>{}{}<>(({})){{}{}<>(<(())>)}{}}(<{}{}>)<>{({}[()])<>(({}()[({})])){{}(<({}({}))>)}{}<>}{}<>({}<{}><>)

5

এমএটিএল , 9 বাইট

qtYF1)EW<

সত্যবাদী আউটপুট হয় 1। মিথ্যা 0বা খালি আউটপুট। (খালি আউটপুট উত্পাদন করে এমন একমাত্র ইনপুটগুলি 1এবং 2; বাকীগুলি হয় 0বা হয় 1)।

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

ব্যাখ্যা

যাক এক্স ইনপুট বোঝান। যাক Y 2 যে ভাগ সর্ববৃহৎ শক্তি হতে এক্স -1 ও z- র = ( x এর -1) / Y । নোট করুন যে z স্বয়ংক্রিয়ভাবে বিজোড়। তারপরে x হল প্রথম সংখ্যা যদি এবং কেবলমাত্র y > z , বা সমানভাবে y 2 > x −1 হয়।

q    % Input x implicitly. Subtract 1
t    % Duplicate
YF   % Exponents of prime factorization of x-1
1)   % First entry: exponent of 2. Errors for x equal to 1 or 2
E    % Duplicate
W    % 2 raised to that. This is y squared
<    % Is x-1 less than y squared? Implicitly display

5

ব্র্যাচল্যাগ , 28 বাইট

>N>0,2:N^P:K*+?,P>K:2%1,N:K=

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

একবারে সমস্ত টেস্টকেস যাচাই করুন। (সামান্য সংশোধিত।)

ব্যাখ্যা

ব্র্যাচল্যাগ, প্রোলোগের ডেরিভেটিভ হওয়ায় জিনিস প্রমাণ করার ক্ষেত্রে এটি খুব ভাল।

এখানে, আমরা এই জিনিসগুলি প্রমাণ করি:

>N>0,2:N^P:K*+?,P>K:2%1,N:K=

>N>0                           input > N > 0
     2:N^P                     2^N = P
         P:K*+?                P*K+1 = input
                P>K            P > K
                  K:2%1        K%2 = 1
                        N:K=   [N:K] has a solution

5

হাস্কেল, 55 46 বাইট

f x=length [x|k<-[1,3..x],n<-[1..x],k*2^n+1==x,2^n>k]>0

সম্পাদনা করুন: নিমিকে ধন্যবাদ, এখন 46 বাইট

f x=or[k*2^n+1==x|k<-[1,3..x],n<-[1..x],2^n>k]

4
প্রোগ্রামিং ধাঁধা এবং কোড গল্ফ স্বাগতম!
ডেনিস

ধন্যবাদ মানুষ! কিছুক্ষণের জন্য এখানে লুকোচুরি হয়ে গেছে। বিগ ফ্যান বিটিডব্লিউ, জেলি সুপার কুল। যদি আমি শিখতে পারি তবে হায় হায়, আমি সত্যিই বুঝতে পারি না
X88B88

2
একটি সাধারণ টিপ: আপনি যদি কোনও বোধগম্যতার দ্বারা তৈরি তালিকার দৈর্ঘ্যের বিষয়ে আগ্রহী হন তবে আপনি এটি ব্যবহার করতে পারেন sum[1| ... ]। এখানে আমরা আরো যেতে পারেন এবং সামনে সমতা পরীক্ষা সরাতে |এবং সঙ্গে চেক orযদি তাদের কোন সত্য: f x=or[k*2^n+1==x|k<-...,n<-...,2^n>k]
নিমি

কি দারুন. দুর্দান্ত টিপস। আমি অবশ্যই সংশোধন করব।
X88B88

2
আপনি যদি জেলি শিখতে আগ্রহী হন, উইকিটি দেখুন বা জেলি ঘরে যোগদান করুন
ডেনিস

5

ECMAScript Regex, 48 43 41 বাইট

নীলস এবং এইচ.পি.উইজের রেজেক্সসগুলি (ইস্কিমস্ক্রিপ্টের স্বাদ উভয়ই) তাদের নিজের মতো করে সুন্দর। এটি করার আরও একটি উপায় আছে, যা সুন্দর ঝলকানো কাকতালীয়তার সাথে নীলের চেয়ে 1 বাইট বেশি ছিল এবং এখন এইচ.পি.উইজের প্রস্তাবিত গল্ফিং (ধন্যবাদ!), এইচ.পি.উইজের চেয়ে 1 বাইট বেশি কম।

সতর্কতা: এই রেজেক্সের ছোট আকার সত্ত্বেও, এটিতে একটি বড় স্পোলার রয়েছে । আমি স্বতন্ত্রভাবে প্রাথমিক গাণিতিক অন্তর্দৃষ্টিগুলি সনাক্ত করে ECMAScript রেজেক্সে অবিচ্ছিন্ন গাণিতিক সমস্যাগুলি কীভাবে সমাধান করবেন তা শিখার জন্য আমি উচ্চতর পরামর্শ দিচ্ছি। এটি আমার জন্য একটি আকর্ষণীয় ভ্রমণ ছিল এবং আমি যে কারও জন্য সম্ভবত এটি চেষ্টা করে দেখতে চাই না, বিশেষত যারা সংখ্যা তত্ত্বের প্রতি আগ্রহী তাদের জন্য আমি এটি লুণ্ঠন করতে চাই না। এই আগের পোস্ট দেখুনএকের পর এক সমাধান করার জন্য পরের বার স্পয়লার-ট্যাগযুক্ত প্রস্তাবিত সমস্যার তালিকার জন্য ।

সুতরাং আপনি যদি কিছু উন্নত ইউনারি রেজেক্স যাদু আপনার জন্য নষ্ট না করতে চান তবে আর পড়বেন না । আপনি যদি এই যাদুটি নিজেই নির্ধারণ করতে শট নিতে চান তবে উপরের লিঙ্কযুক্ত পোস্টটিতে বর্ণিত ECMAScript রেজেক্সে কিছু সমস্যা সমাধানের মাধ্যমে আমি সুপারিশ করব।

সুতরাং, এই রেজেক্সটি বেশ সহজভাবে কাজ করে: এটি একটি বিয়োগ করে শুরু হয়। তারপরে এটি সর্বাধিক বিজোড় ফ্যাক্টরটি আবিষ্কার করে, কে । তারপরে আমরা কে দ্বারা ভাগ করব (বিভাগের অ্যালগরিদমটি সংক্ষিপ্তভাবে আমার ফ্যাকটোরিয়াল সংখ্যাগুলি রেজেক্স পোস্টের একটি স্পয়লার-ট্যাগ অনুচ্ছেদে ব্যাখ্যা করেছেন )। আমরা sneakily একটি যুগপত কথন রয়েছে তা পরিসমাপ্তি ভাগফল তার চেয়ে অনেক বেশী কি । বিভাগটি যদি মেলে তবে আমাদের প্রথম সংখ্যা রয়েছে; যদি না হয়, আমরা না।

গ্রিমির দ্বারা প্রাপ্ত ট্রিকটি ব্যবহার করে আমি এই রেজেক্স (৪৩ → ৪১) থেকে ২ বাইট ফেলতে সক্ষম হয়েছি যা ভাগ্য বিভাজকের থেকে বড় বা সমান হওয়ার গ্যারান্টিযুক্ত ক্ষেত্রে এই সংক্ষিপ্ত বিভাগকে আরও সংক্ষিপ্ত করতে পারে।

^x(?=(x(xx)*)\1*$)((\1x*)(?=\1\4*$)x)\3*$

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


 # Match Proth numbers in the domain ^x*$
 ^
 x                         # tail = tail - 1
 (?=(x(xx)*)\1*$)          # \1 = largest odd factor of tail
 
 # Calculate tail / \1, but require that the quotient, \3, be > \1
 # (and the quotient is implicitly a power of 2, because the divisor
 # is the largest odd factor).
 (                         # \3 = tail / \1, asserting that \3 > \1
     (\1x*)                # \4 = \3-1
     (?=\1\4*$)            # We can skip the test for divisibility by \1-1
                           # (and avoid capturing it) because we've already
                           # asserted that the quotient is larger than the
                           # divisor.
     x
 )
 \3*$
 


1
ও_ও বাহ, কেবল 48 বাইট
ASCII-

ডেনিসের তুলনায় আমার সাথে
নীলেরও

4

জুলিয়া, 16 বাইট

!x=~-x&-~-x>x^.5

উত্তর এবং কিছু গল্ফিং টিপসের জন্য @ ডেনিসকে ক্রেডিট!


যে কাজ করে না। জুলিয়ায়, &এর একই নজির রয়েছে *
ডেনিস

1
হ্যাঁ সঠিক. স্থির: পিআই এর সত্যিকার অর্থে আমার কোডটি পরীক্ষা করা উচিত।
মামা ফান রোল

2
আপনি -~-xপরিবর্তে ব্যবহার করতে পারেন (1-x)। এছাড়াও, এর √xপরিবর্তে রয়েছে x^.5, তবে এটি কোনও বাইট সংরক্ষণ করে না।
ডেনিস

4

আর, 52 50 বাইট

x=scan()-1;n=0;while(!x%%2){x=x/2;n=n+1};2^(2*n)>x

সমীকরণের অংশটি খুঁজে বের করার জন্য , ততক্ষণে N-1এখানে (এখানে ডাকা Pএবং x) বিভাজন করে প্রোগ্রামটি শুরু হয় , এবং তারপরে ওয়েথারকে গণনা করা বা নিকৃষ্ট করা যায় না , এই সত্যটি ব্যবহার করে22^nk=(N-1)/2^nk2^n2^n>x/2^n <=> (2^n)²>x <=> 2^2n>x


1
আপনি P=শুরুতে টানতে পারেন , এবং 2^n>x
শেষটি

4

Regex (ECMAScript), 40 38 বাইট

-2 বাইটস ডেডকোডকে ধন্যবাদ

^x(?=((xx)+?)(\1\1)*$)(?!(\1x\2*)\4*$)

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

মন্তব্য করা সংস্করণ:

# Subtract 1 from the input N
^x

# Assert N is even.
# Capture \1 = biggest power of 2 that divides N.
# Capture \2 = 2.
(?=((xx)+?)(\1\1)*$)

# Assert no odd number > \1 divides N
(?!(\1x\2*)\4*$)

বাহ, এটা খুব দুর্দান্ত। এই সমস্যাটি করার জন্য বিভিন্ন উপায়!
ডেডকোড

1

2

জে, 10 বাইট

%:<<:AND-.

@Dennis ', bitwise উপর ভিত্তি করে সমাধান

একটি ইনপুট নেয় nএবং 1 টি যদি প্রথম সংখ্যা হয় তবে 0 প্রদান করে।

ব্যবহার

   f =: %:<<:AND-.
   f 16
0
   f 17
1
   (#~f"0) >: i. 100  NB. Filter the numbers [1, 100]
3 5 9 13 17 25 33 41 49 57 65 81 97

ব্যাখ্যা

%:<<:AND-.  Input: n
        -.  Complement. Compute 1-n
   <:       Decrement. Compute n-1
     AND    Bitwise-and between 1-n and n-1
%:          Square root of n
  <         Compare sqrt(n) < ((1-n) & (n-1))

হাহ। আমি সম্পর্কে জানতাম না AND। শান্ত!
কনর ও'ব্রায়েন

2

রেটিনা 0.8.2 , 47 বাইট

\d+
$*
+`(1+)\1
$+0
01
1
+`.10(0*1)$
1$1
^10*1$

এটি অনলাইন চেষ্টা করুন! ব্যাখ্যা: প্রদত্ত প্রথম সংখ্যা·2এন+ +1, আপনি দুটি নতুন প্রথম সংখ্যা পেতে পারেন (2±1)·2এন+ +1+ +1। যেখানে আমরা কোনও প্রথম সংখ্যা না পাওয়া পর্যন্ত আমরা এটি বিপরীতে চালাতে পারি=1। এটি সহজেই বাইনারি প্রতিনিধিত্বকে রূপান্তর করে সম্পাদিত হয়।

\d+
$*

অ্যানারিতে রূপান্তর করুন।

+`(1+)\1
$+0
01
1

বাইনারি রূপান্তর করুন।

+`.10(0*1)$
1$1

বারবার বিপরীতে প্রথম প্রজন্মের সূত্রটি চালান।

^10*1$

প্রথম প্রজন্মের সূত্রের বেস কেসটি মিলান।

সম্পাদনা: আমি মনে করি কোনও একক রেজেক্সের সাথে সরাসরি কোনও আনারি সংখ্যার সাথে সরাসরি কোনও সংখ্যার সাথে মিলানো সম্ভব। আনারি নম্বরটি প্রথম সংখ্যা কিনা তা যাচাই করার জন্য এটি বর্তমানে আমার বর্তমান রেটিনা কোডের চেয়ে 47 বাইট, 7 বাইট বেশি লাগে:

^.(?=(.+?)(\1\1)*$)(?=((.*)\4.)\3*$).*(?!\1)\3$

2

ইসমাস্ক্রিপ্ট রিজেক্স, 42 বাইট

^x(?=(x(xx)*)\1*$)(?=(x+?)((\3\3)*$))\4\1x

এটি অনলাইন চেষ্টা করুন! (রেটিনা ব্যবহার করে)

আমি মূলত 1 টি বিয়োগ করি, বৃহত্তম সম্ভাব্য বিজোড় সংখ্যা দ্বারা ভাগ করি k , তবে কমপক্ষে কমপক্ষে k+1বাকি আছে কিনা তা পরীক্ষা করে দেখুন।

দেখা যাচ্ছে যে নীল তার উত্তরটির শেষে যেটা দিয়েছে তার সাথে আমার রেজেক্সের খুব মিল রয়েছে । আমি এর x(xx)*পরিবর্তে ব্যবহার করি (x*)\2x। এবং আমি যাচাই করার জন্য একটি ছোট পদ্ধতি ব্যবহার করিk < 2^n


বাহ, এটা দুর্দান্ত! খুব সুন্দরভাবে সম্পন্ন হয়েছে। মনে রাখবেন আপনি এটি একটি সামান্য বিট আরও দ্রুত পরিবর্তন করে তুলতে পারে (\3\3)*)$থেকে(\3\3)*$)
Deadcode

এই রেটিনা কোড সহ দুর্দান্ত কাজ। আমি $=ও সম্পর্কে জানতাম না $.=। এটি আরও উন্নত করা যেতে পারে ।
ডেডকোড

2
@ ডেডকোড আপনি যদি শিরোনাম এবং পাদলেখকে নিটপিক করতে চলেছেন তবে আরও কিছু উন্নতি করতে হবে
নীল

@ নীল যা দেখতে খুব ভাল গল্ফের মতো দেখাচ্ছে, তবে দুর্ভাগ্যক্রমে এটি একটি বাগ আছে বলে মনে হচ্ছে। একক সংখ্যা চেষ্টা করুন । তারা কাজ করে না।
ডিসেম্বর

1
@ ডেডকোড দুঃখিত, আমি বুঝতে পারি নি যে একক সংখ্যাগুলি "অনুমান" এর অংশ।
নীল

2

ব্রেন-ফ্লাক , 128 বাইট

({<{({}[()]<(([{}]())<>{})<>>)}{}>{{}(<>)}{}}<><(())>){([()]{}<(({}){})>)}{}([({}[{}(())])](<>)){({}())<>}{}{((<{}>))<>{}}{}<>{}

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

আমি পুরানো ব্রেইন-ফ্লাক সমাধানের চেয়ে খুব আলাদা অ্যালগরিদম ব্যবহার করেছি

মূলত, আমি এমনকি একটি সংখ্যার হিট না হওয়া পর্যন্ত আমি 2 দ্বারা বিভাজন (রাউন্ড আপ) করি। তারপরে আমি কেবলমাত্র দুটি বিভাগের সংখ্যার সাথে দুটি বিভাগের শক্তির সাথে শেষ বিভাগের ফলাফলের সাথে তুলনা করি।

ব্যাখ্যা:

({
  # (n+1)/2 to the other stack, n mod 2 to this stack
  <{({}[()]<(([{}]())<>{})<>>)}{}>
  # if 1 (n was odd) jump to the other stack and count the one
  {{}(<>)}{}
#end and push the sum -1, with a one under it
}<>[(())])
#use the one to get a power of two
{([()]{}<(({}){})>)}{}
#compare the power of two with the remainder after all the divisions
([({}[{}(())])](<>)){({}())<>}{}{((<{}>))<>{}}{}<>{}

1

ম্যাপেল, 100 বাইট (স্পেস সহ)

IsProth:=proc(X)local n:=0;local x:=X-1;while x mod 2<>1 do x:=x/2;n:=n+1;end do;is(2^n>x);end proc:

পঠনযোগ্যতার জন্য সুন্দরভাবে ব্যবধানযুক্ত:

IsProth := proc( X )
    local n := 0;
    local x := X - 1;
    while x mod 2 <> 1 do
        x := x / 2;
        n := n + 1;
    end do;
    is( 2^n > x );
end proc:

অন্য কয়েকজন হিসাবে একই ধারণা; এক্সকে 2 দিয়ে 2 ভাগ করুন যতক্ষণ না এক্স 2 দিয়ে সমানভাবে বিভাজ্য হয়, তারপরে মানদণ্ডটি পরীক্ষা করুন 2 ^ n> x।


1

জাভা 1.7, 49 43 বাইট

আর চারজন বাইটস ধুলা ধন্যবাদ @ চার্লিকে ধন্যবাদ।

boolean g(int p){return p--<(p&-p)*(p&-p);}

চেষ্টা করে দেখুন! (ideone)

দুটি উপায়, সমানভাবে দীর্ঘ। এখানে বেশিরভাগ উত্তরের মতোই ক্রেডিটগুলি অবশ্যই @ ডেনিসে প্রকাশের জন্য যায়।

অভিব্যক্তির ডানহ্যান্ডের মূলটি গ্রহণ করা:

boolean f(int p){return(p-1&(1-p))>Math.sqrt(p);}

এক্সপ্রেশনটির বামদিকে দু'জনের শক্তি প্রয়োগ করা:

boolean g(int p){return Math.pow(p-1&(1-p),2)>p;}

যদি একটি ধনাত্মক সংখ্যাসূচক মানটিকে 'সত্যবাদী', এবং নেতিবাচক মান 'মিথ্যা' উপস্থাপনের অনুমতি দেওয়া হয় তবে একটি একক বাইট বন্ধ করে দিতে পারে:

double g(int p){return Math.pow(p-1&(1-p),2)-p;}

দুর্ভাগ্যক্রমে 'সংকীর্ণ আদিম রূপান্তর' এর কারণে কেউ জাভাতে কেবল এটিকে লিখতে পারে না এবং সঠিক ফলাফল পেতে পারে না:

((p - 1 & (1 - p))^2) > p;

এবং 'পি' প্রশস্ত করার যে কোনও প্রয়াস একটি সংকলন ত্রুটির দিকে পরিচালিত করবে কারণ বিটওয়াইজ অপারেটরগুলি যেমন ফ্লোট বা ডাবলগুলিতে সমর্থিত নয় :(


1
f = 47:boolean f(int p){return Math.sqrt(p--)<(p&-p);}
চার্লি

1
g = 43:boolean g(int p){return p--<(p&-p)*(p&-p);}
চার্লি

সুন্দর! আমি জানতাম Math.*কলগুলি থেকে মুক্তি পাওয়ার উপায় আছে ; ঠিক কিভাবে বুঝতে পারি না! ধন্যবাদ!
এমএইচ।





0

সি (১৩7 বাইট)

int P(int N){int x=1,n=0,k=1,e=1,P=0;for(;e;n++){for(x=1,k=1;x&&x<N;k+=2){x=2<<n;x=x>k?x*k+1:0;if(x>N&&k==1)e=0;}if(x==N)P=1;}return P;}

আমি চেষ্টা করার পরে কেবল উত্তরগুলি পড়তে এসেছি।

N=k*2^n+1শর্তসাপেক্ষে বিবেচনা করা k<2^n( k=1,3,5..এবংn=1,2,3..

সঙ্গে n=1আমরা এক আছে kপরীক্ষা পাওয়া যায়। আমরা বাড়ার সাথে সাথে এরকম পরীক্ষার জন্য nআমরা আরও কয়েকটি পেয়েছি k's:

n = 1; ট = 1

n = 2; কে = 1 কে = 3

n = 3; কে = 1 কে = 3 কে = 5 কে = 7

...

এই সম্ভাবনার মধ্য দিয়ে পরীক্ষা করে আমরা নিশ্চিত হতে পারি যে প্রদত্ত nসংস্থার জন্য এন কোনও গর্ব নম্বর নয়k=1 সংখ্যা প্রাপ্ত এন চেয়ে বড় এবং অন্য কোনো পুনরাবৃত্তির একটি ম্যাচ ছিল।

সুতরাং আমার কোডটি মূলত "ব্রুট-ফোর্স" এন অনুসন্ধান করার পথে way

অন্যান্য উত্তরগুলি পড়ার পরে এবং উপলব্ধি করার পরে আপনি N-1 এর সাথে 2 এর সাথে 2 টি সন্ধান করতে nএবং তারপরে শর্তসাপেক্ষে তৈরি করতে পারেনk<2^n , আমি মনে করি এই পদ্ধতিটি ব্যবহার করে আমার কোডটি আরও ছোট এবং আরও দক্ষ হতে পারে।

এটা ব্যবহার করে দেখুন মূল্য ছিল!

প্রদত্ত সমস্ত সংখ্যা এবং কয়েকটি "অ-গৌরব" সংখ্যা পরীক্ষা করেছে। সংখ্যাটি গর্বিত সংখ্যা হলে 1 এবং যদি 0 না হয় তবে ফাংশনটি প্রদান করে।


0

জাভাস্ক্রিপ্ট ES7, 16 বাইট

x=>x--<(-x&x)**2

আমার জুলিয়া উত্তর বন্দর, যা @ ডেনিসের জেলি উত্তরের একটি বন্দর।

ধন্যবাদ # চার্লি 2 বাইট সংরক্ষণের জন্য!


n=x=>x-1&1-x>x**.5; n(3)আমাকে দেয় 0(প্রকৃতপক্ষে এটি আমাকে ইনপুট নির্বিশেষে 0 দেয়)
49

কি ব্রাউজার? এটা ঠিক হতে পারে।
মামা ফান রোল

ক্রোম 52. ফায়ারফক্স 48 একই উত্তর দেয়n=x=>x-1&1-x>Math.pow(x,0.5); n(3)

ঠিক আছে - এটি অপারেটর অগ্রাধিকার। এটি (x-1&1-x)ছাড়া এটি যেমন অপারেটর (x-1)&((1-x)>x**.5)
নজরে আসবে তা হ'ল

1
-1 বাইট: x=>x--**.5<(x&-x)বাx=>x**.5<(--x&-x)
চার্লি


0

কালি , 60 বাইট

=p(n)
~n-=n>1
~temp x=1
-(k){n%2:{n<x}->->}
~x+=x
~n=n/2
->k

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

@ ডিএসকোগের ম্যাপেল উত্তরের উপর ভিত্তি করে - এটি পোস্ট করা এই ধরণের প্রথমটি ছিল না, তবে আমি দেখেছি এটি এটিই প্রথম ছিল।

Ungolfed

= is_proth(number) =

/* It's easy to check if a number is one less than a Proth number.
   We take the number and divide it by 2 until we can't.
   Once we can't, we've found the smallest possible "k".
   If we also keep track of how many times we divided, we have our corresponding "2^n"
   All we have to do then is compare those
*/

~ number -= (number > 1)            // So, we first subtract one. Except this implementation won't ever halt for 0, so we don't subtract if the input is 1 (this is fine since the desired outputs for inputs 1 and 2 are the same)
~ temp power_of_two = 1             // We declare a variable to store our "2^n"
- (check)
  {
  - number % 2:                     // Once we can't divide by 2 anymore, we've found the smallest possible "k"
    {number < power_of_two}         // At that point, we print whether it's smaller than the "2^n" we found
    ->->                            // And then we return to where we were called from
  }

  ~ number = number / 2             // We keep dividing by 2 until we can't.
  ~ power_of_two += power_of_two    // and update our "2^n" as we go
-> check

0

x86 মেশিন কোড, 15 বাইট

4F 89 F8 F7 D8 21 F8 0F AF C0 39 C7 19 C0 C3

এই বাইটগুলি একটি ফাংশন সংজ্ঞায়িত করে যা EDIরেজিস্টারে ইনপুট আর্গুমেন্ট (স্বাক্ষরবিহীন পূর্ণসংখ্যার) গ্রহণ করে , x86 সিস্টেমের জন্য স্ট্যান্ডার্ড সিস্টেম ভি কলিং কনভেনশন অনুসরণ করে এবং এটি সকলেরEAX মতই রেজিস্টারে ফলাফল প্রদান করে x86 কলিং কনভেনশনগুলির মতো করে দেয়।

একত্রিতকারী স্মৃতিবিদ্যায়:

4F          dec   edi            ; input -= 1
89 F8       mov   eax, edi       ; \ temp
F7 D8       neg   eax            ; |      =
21 F8       and   eax, edi       ; /        (input & -input)
0F AF C0    imul  eax, eax       ; temp *= temp
39 C7       cmp   edi, eax       ; set CF if (input < temp)
19 C0       sbb   eax, eax       ; EAX = -CF
C3          ret                  ; return with result in EAX
                                 ;  (-1 for Proth number; 0 otherwise)

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

এটি একটি দুর্দান্ত সোজা সমাধান — এবং মেগা টমের সি সংস্করণের মত ধারণাগত । আসলে, আপনি সি তে এটি নিম্নলিখিত কিছু হিসাবে লিখতে পারেন:

unsigned IsProthNumber(unsigned input)
{
    --input;
    unsigned temp  = (input & -input);
    temp          *= temp;
    return (input < temp) ? -1 : 0;
}

তবে উপরের মেশিন কোডটি কোনও সি সংকলক থেকে বেরিয়ে আসার চেয়ে আরও ভাল গল্ফযুক্ত, এমনকি যখন এটি আকারের জন্য অনুকূলিত করার জন্য সেট করেছে।

এখানে কেবল "প্রতারণা" "সত্যবাদী" মান এবং 0 টি "মিথ্যা" মান হিসাবে প্রত্যাবর্তন করছে। এই কৌশলটি 3-বাইট SBBনির্দেশের বিপরীতে 2-বাইট নির্দেশ ব্যবহারের অনুমতি দেয় SETB

আমাদের সাইট ব্যবহার করে, আপনি স্বীকার করেছেন যে আপনি আমাদের কুকি নীতি এবং গোপনীয়তা নীতিটি পড়েছেন এবং বুঝতে পেরেছেন ।
Licensed under cc by-sa 3.0 with attribution required.