প্রোগ্রামটি পরবর্তী মূল সংখ্যাটি খুঁজে পাবে


15

ইন্ট্রো:


আপনি মজাদার জন্য তৈরি একটি ডিভাইসটি দুর্ঘটনাক্রমে সময়ের প্রবাহকে দূষিত করেছিলেন, এটি একটি টাইম মেশিনে পরিণত হয়েছিল। ফলস্বরূপ, আপনি সুদূর ভবিষ্যতে ধাক্কা পেয়েছেন। আপনি বুঝতে পেরেছিলেন যে কম্পিউটিং, প্রক্রিয়াকরণ শক্তি এবং সাধারণভাবে কম্পিউটারগুলি বিপুল পরিমাণে, সুনির্দিষ্ট হওয়ার জন্য একটি অসীম পরিমাণ দ্বারা বিকশিত হয়েছে । সুতরাং আপনি নিজেকে অসীম মেমরি এবং প্রক্রিয়াকরণ শক্তি সহ একটি কম্পিউটার দখল করেন। এটি কীভাবে অসীম মেমরি এবং অসীম প্রসেসিং শক্তি থাকতে পারে তা আপনার কোনও ধারণা নেই তবে আপনি কেবল এটি গ্রহণ করে বর্তমানটিতে ফিরে যান।

চ্যালেঞ্জ:


আপনি শুনেছেন যে বর্তমানে সর্বাধিক প্রধানতম ব্যক্তিটি আবিষ্কার করেছেন 2^74,207,281 − 1তাকে $ 100.000 দেওয়া হয়েছে। আপনি কম্পিউটারের জন্য যে অর্থ ব্যয় করেছেন তা ফেরত পেতে চাইলে আপনি এমন একটি প্রোগ্রাম তৈরি করার সিদ্ধান্ত নেবেন যা পরবর্তী প্রাইমকে খুঁজে পায়। আপনি এমন একটি তৈরি করেন যা কোনও সংখ্যার ইনপুট নেয় এবং পরের প্রধান সংখ্যাটি হ'ল ব্রুটফোর্সিং বা অন্য কোনও পদ্ধতি দ্বারা।

স্পেসিফিকেশন: আপনার কাছে অসীম মেমরি এবং প্রক্রিয়াকরণ ক্ষমতা সহ একটি হাইপোথটিক্যাল মেশিন রয়েছে। আপনার প্রোগ্রামটি সীমাবদ্ধ নয় (উদাহরণস্বরূপ: সি # এর অন্তর্নিহিত থেকে এটি সঞ্চয় করতে -2,147,483,648পারে 2,147,483,647), ভাল আপনার প্রোগ্রামটি অবশ্যই সঞ্চয় করতে সক্ষম হতে পারে এবং যে কোনও আকারের সংখ্যার সাথে কাজ করতে পারে। আপনার অসীম সংস্থান রয়েছে, তাই আপনি যদি এটির অনুমতি দেন তবে আপনার স্মৃতিশক্তি শেষ হয়ে যায় কিনা তা আপনার যত্ন নেওয়া উচিত নয়।

আই / ও উদাহরণ:
ইনপুট: 22,338,618 সংখ্যা সহ বর্তমানে সর্বাধিক সন্ধান করা প্রধান।
আউটপুট: ঠিক পরবর্তী প্রধানমন্ত্রী

স্পষ্টতই, আপনাকে প্রমাণ করতে হবে না যে এটি কাজ করে, কারণ কোনও শারীরিক মেশিনে গণনা করতে এক টন সময় লাগবে। তবে যদি আপনি আপনার প্রোগ্রামটিকে অসীম প্রক্রিয়াকরণ শক্তি / মেমরির সাথে অনুমানযুক্ত মেশিনে স্থানান্তরিত করেন তবে তা সঙ্গে সঙ্গে গণনা করা উচিত।


পরবর্তী প্রাইম সন্ধান করা এবং একটি সংখ্যা প্রধান কিনা তা পরীক্ষা করা দুটি সম্পূর্ণ ভিন্ন জিনিস different


1
এটি বিশেষভাবে পরবর্তী প্রধানমন্ত্রী হতে হবে ? বড় প্রাইমগুলির জন্য প্রচুর প্রাইম সন্ধানের অ্যালগরিদম কেবলমাত্র নির্দিষ্ট ধরণের সংখ্যার সন্ধান করে এবং তাই কখনও কখনও প্রাইমগুলি মিস করে ...
ফ্লিপট্যাক

10
আমি মনে করি আপনার কয়েকটি গুরুতর পরীক্ষার কেস যুক্ত করা উচিত।
ফ্লিপট্যাক

3
" আপনার প্রোগ্রামটি সীমাবদ্ধ নয় " তবে উদাহরণের ভিত্তিতে আমি সন্দেহ করি যে অস্তিত্বের প্রতিটি ভাষাই সীমাবদ্ধ হিসাবে গণ্য হয় যদি মেমরির সমাধানের জন্য সীমাবদ্ধ টাইপ ব্যবহার করা ছাড়া অন্য কোনও কারণে উপযুক্ত না হয়।
পিটার টেলর


2
@ এমবিম্ব007 কেন? অন্তর্নির্মিত উত্তরগুলি বাদে সমস্ত উত্তর কেবলমাত্র একটি অতিরিক্ত মোড়ক যুক্ত করতে দেখা যায়।
পোস্ট রক গার্ফ হান্টার

উত্তর:



8

পাইথন 3 , 45 বাইট

f=lambda n,k=1,m=1:m%k*k>n or-~f(n,k+1,m*k*k)

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


3
আমি বিশ্বাস করি এটি ছদ্মবেশে উইলসনের উপপাদ্য। kচূড়ান্ত ফলাফল সমান, mথাকে (k-1)!^2। যেহেতু (কে -১)! = -1 মোড কে কেবল তখনই ধরে রাখে যখন কে প্রাইম থাকে, আমাদের (কে -1)! (কে -1)! = 1 মোড কে, যা কে দ্বারা গুণিত হলে কে নিজেই হবে। আপনি (কে -1) এর একমাত্র ব্যতিক্রম থেকে মুক্তি পেতে বর্গাকার গণনা করুন! মিশ্রিত কে জন্য 0 0 কেডো কে, যা কে = ৪ এর জন্য ঘটে? সঠিক?
orlp

হ্যাঁ এটা ঠিক.
ডেনিস

এই ছোঁড়ার RecursionError: maximum recursion depth exceeded in comparisonজন্যf(1000)
ovs

5
@ovs প্রশ্নটি বলছে আমাদের অসীম স্মৃতি রয়েছে। অতএব আমরা একটি অসীম উচ্চ পুনরাবৃত্তির গভীরতা সীমা ধরে নিতে পারি, এবং সুতরাং এটি নিয়ে চিন্তা করবেন না RecursionError
ফ্লিপট্যাক

6

পাইথন 2, 78 77 76 74 বাইট

def f(n):
 while 1:
    n+=1
    if[i for i in range(1,n)if n%i<1]==[1]:return n

-১ বাইট @ ক্রিটিক্সিলিথোসকে ধন্যবাদ -১ বাইট @ ফ্লিপট্যাককে
ধন্যবাদ
-২ বাইট @ এলপিড্রোকে ধন্যবাদ


n%i<1এর চেয়ে সংক্ষিপ্তn%i==0
ক্রিতমিক লিথোস

এর পরে আপনার হোয়াইটস্পেসের দরকার নেই if
ফ্লিপট্যাক

আমি মনে করি আপনি বোঝাতে চেয়েছেন<1
জোনাথন অ্যালান

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

1
@ এলপিড্রো ঠিক আছে। আপনি সামনে n+=1এবং ifট্যাবগুলিতে 2 টি স্পেস পরিবর্তন করতে এবং 2 বাইট সংরক্ষণ করতে পারেন



4

বাশ + কোর্টিলস, 52 বাইট

for((n=$1,n++;`factor $n|wc -w`-2;n++)){ :;};echo $n

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

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


প্রকৃতপক্ষে ডক্সগুলি ফ্যাক্টরের জন্য নির্দিষ্ট করে যে gnu এমপি ব্যতীত কেবলমাত্র একক নির্ভুলতা সমর্থনযোগ্য supported
দানি_ল

1
@ দানি_এল, বাশের জন্য প্রবেশের লোকটি কেবলমাত্র বলেছে: "ওভারফ্লোর জন্য কোনও পরীক্ষা ছাড়াই নির্ধারিত প্রস্থের পূর্ণসংখ্যায় মূল্যায়ন করা হয়, যদিও 0 দ্বারা বিভাজন আটকে যায় এবং ত্রুটি হিসাবে চিহ্নিত করা হয়।" এটি প্রস্থ নির্দিষ্ট করে না। (যেমনটি আমি মনে করি, আমার মেশিনগুলিতে ব্যাশের স্টক বাস্তবায়নগুলি -৪-বিট স্বাক্ষরিত পূর্ণসংখ্যার ব্যবহার করে তবে আমি এখনই যাচাই করতে পারি না)) কারণ হিসাবে, এটি অবশ্যই আপডেট হবে: অসীম সংস্থান সহ ওপি'র ভবিষ্যতের কম্পিউটারগুলির ফ্যাক্টর থাকবে সীমাহীন নির্ভুলতা পেতে gnu_up দিয়ে সংকলিত :)।
মিচেল স্পেক্টর

3

ম্যাক্সিমা, 10 বাইট

next_prime

একটি ফাংশন তার আর্গুমেন্টের চেয়ে ক্ষুদ্রতম প্রাইমকে ফিরিয়ে দেয়।



3

সিম্পি সহ পাইথন, ২৮ বাইট

import sympy
sympy.nextprime

sympy.nextprimeএটি এমন একটি ফাংশন যা টিনে যা বলে তা করে। সব ভাসমান জন্য কাজ করে।

repl.it


পাইথন, 66 59 বাইট

-4 বাইট লিনকে ধন্যবাদ (ব্যবহার করুন -~)
-3 বাইটগুলি ফ্লিপট্যাককে ধন্যবাদ (ব্যবহার করুন andএবং or, ...==1একটি ...-1শর্তে স্যুইচ করার অনুমতি দেয় ))

f=lambda n:sum(-~n%-~i<1for i in range(n))-1and f(n+1)or-~n

repl.it

একটি পুনরাবৃত্ত ক্রিয়াকলাপ যা nপ্রধানের সন্ধান না হওয়া অবধি গণনা করে এটি পরীক্ষা করে দেখা হয় যে কেবলমাত্র একটি সংখ্যা n-1এটির ভাগ করে দেয় (অর্থাত্ 1)। সমস্ত পূর্ণসংখ্যার জন্য কাজ করে, ভাসমানদের জন্য ত্রুটি উত্থাপন করে।

2.7.8 এবং 3.5.2, কাজ করে (মধ্যে স্থান অভাবে বাক্যগঠন ত্রুটি 3.3.3 কাজ করে না ==1এবং else)


(n+1)%(i+1)হয় -~n%-~i, আমি মনে করি।
লিন

এটি, ধন্যবাদ ... আমি উইলসনের উপপাদ্যটি ব্যবহার করে একটি ছোট করার চেষ্টা করছিলাম।
জোনাথন অ্যালান

শর্ট সার্কিট and/ orকাজ যেমন f=lambda n:sum(-~n%-~i<1for i in range(n))==1and-~n or f(n+1)?
ফ্লিপট্যাক

আসলে, সেই g গল্ফ করা যেতে পারেf=lambda n:sum(-~n%-~i<1for i in range(n))-1and f(n+1)or-~n
ফ্লিপট্যাক

@ ফ্লিপট্যাক আমি প্রাথমিকভাবে এগুলি এড়িয়ে গেছি যাতে এটি শূন্যের মধ্য দিয়ে যেতে পারে তবে এটি কাজ করবে - এটি একটি তিনটি বাইট সংরক্ষণ!
জোনাথন অ্যালান

2

পাইথন, 114 83 বাইট

def g(b):
 while 1:
  b+=1
  for i in range(2,b):
   if b%i<1:break
  else:return b

বিল্টিন ছাড়া, যদি থাকে তবে if

-30 সাদা জায়গা এবং -1 এ পরিবর্তন করে অপসারণ b%i==0করেb%i<1


3
আপনি যদি রাখেন তবে পরবর্তী 1
প্রাইমটি পাবেন

এটি এখন ধরে নেয় যে বি <2 2
সিকিক্স্প

আপনি কেবল নিজের নিয়ম তৈরি করতে পারবেন না ... আপনার চ্যালেঞ্জের বিশদটি অনুসরণ করতে হবে। কোথাও এটি বলা হয় নি যে আপনি ইনপুটটির সীমাটি ধরে নিতে পারেন।
ফ্লিপট্যাক

এমনকি এই অনুমান সহ, এটি সমস্ত এমনকি মূল্যবান ইনপুটগুলির জন্য ব্যর্থ।
ফ্লিপট্যাক

আমি একজন বোকা, আমি এটি ভুল করে পড়েছি। ঠিক কর. @ ফ্লিপট্যাক
sagiksp

2

পার্ল 6 , 25 বাইট

{first *.is-prime,$_^..*}

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

{                       }  # A lambda.
                  $_ ..*   # Range from the lambda argument to infinity,
                    ^      # not including the start point.
 first           ,         # Iterate the range and return the first number which
       *.is-prime          # is prime.

পার্ল 6 , 32 বাইট

{first {all $_ X%2..^$_},$_^..*}

অকার্যকর কাস্টম প্রাথমিকতা পরীক্ষা সহ।

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

বাহ্যিক কাঠামো উপরের মতো একই, তবে প্রিডিকেটটি পাস first(কোনও প্রদত্ত সংখ্যাটি প্রধান কিনা তা সিদ্ধান্ত নিতে) এখন:

{               }  # A lambda.
     $_            # Lambda argument (number to be tested).
          2..^$_   # Range from 2 to the argument, excluding the end-point.
        X          # Cartesian product of the two,
         %         # with the modulo operator applied to each pair.
 all               # Return True if all the modulo results are truthy (i.e. non-0).

আমি পার্ল 5 এর সাথে আরও কিছু সংক্ষিপ্ত পাওয়ার আশা করছিলাম তবে একটি বিল্ট- .is-prime
জায়েদ

2

পাইকে, 8 7 বাইট

~p#Q>)h

এখানে চেষ্টা করুন!

4 বাইট, নন-কেপটিং

(চ্যালেঞ্জ পোস্ট হওয়ার পরে দোভাষীর আপডেট হয়েছে)

~p<h

এখানে চেষ্টা করুন!

~p   -   primes_iterator()
  <  -  filter(^, input() < i)
   h - ^[0]

দ্বিতীয় ননপ্যাটিং কেন? আমি যথেষ্ট বুঝতে পারি না।
theonlygusti

@ থিওনলিগুস্টি: সাধারণত, এখানে জমা দেওয়ার নন-কেপটিংকে চিহ্নিত করার একমাত্র বৈধ কারণ হ'ল (এটি একেবারে জমা না দেওয়ার বিপরীতে) কারণ আপনি প্রোগ্রামটি লিখিত ভাষায় কোনও বাগ সংশোধন করেছেন বা কোনও বৈশিষ্ট্য যুক্ত করেছেন এবং এটি আপনাকে চ্যালেঞ্জের সাথে সহায়তা করেছে that । (আমি এটিকে "ল্যাঙ্গুয়েজ পোস্টডেটস চ্যালেঞ্জ" হিসাবে আরও স্পষ্ট করে

@ থিওনলিগুস্টি পরিষ্কার করেছেন
ব্লু


1

05 এবি 1 ই , 16 13 বাইট (এমিগানা @ -3 বাইট)

2•7£?ÿ•o[>Dp#

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

2•7£?ÿ•o        # Push current largest prime.
        [   #    # Until true..
         >Dp    # Increment by 1, store, check primality.
                # After infinite loop, implicitly return next prime.

[>Dp#কাজ করবে না ?
এমিগিনা

আপনি এখনও আরও 8 টি বাইট কাটতে পারেন কারণ প্রোগ্রামটি ইনপুট হিসাবে প্রাইম নেওয়া উচিত এবং পরবর্তী প্রাইমকে আউটপুট দেয়।
এমিগানা

@ এমিগনা তখন এই প্রশ্নটি একটি সদৃশ।
ম্যাজিক অক্টোপাস উরান

হ্যাঁ সম্ভবত।
এমিগিনা

1

পার্ল, 30 বাইট (29 +1 এর জন্য -p):

(1x++$_)=~/^(11+?)\1+$/&&redo

ব্যবহার

রিটার্ন টিপানোর পরে নম্বরটি ইনপুট করুন (নীচে উদাহরণস্বরূপ ইনপুট 12345, 12347 আউটপুট):

$ perl -pe '(1x++$_)=~/^(11+?)\1+$/&&redo'
12345
12347

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

  • 1এর দৈর্ঘ্যের একটি স্ট্রিং সংজ্ঞা দিন ++$_যেখানে $_প্রাথমিকভাবে ইনপুট মান হয় is
  • রেজেক্সগুলি পরীক্ষা করে যে এর স্ট্রিং 1নন-প্রাইম দৈর্ঘ্য ( এখানে ব্যাখ্যা করা হয়েছে ) তা পরীক্ষা করে দেখুন।
  • যদি স্ট্রিংয়ের দৈর্ঘ্য অ-মৌলিক হয় তবে পরের পূর্ণসংখ্যার ( ++$_) জন্য পুনরায় মূল্যায়ন করা হবে
  • স্ট্রিংয়ের দৈর্ঘ্য যদি প্রধান হয় তবে অন্তর্নিহিত whileলুপটি প্রস্থান করে এবং -pএর মান মুদ্রণ করে$_
  • দ্রষ্টব্য: "1"দৈর্ঘ্য 1 এর প্রান্তের কেসটি হ্যান্ডেল করার দরকার নেই কারণ এটি 1স্পেসিফিকেশন অনুযায়ী কম মানের জন্য কখনও ব্যবহার করা হবে না ।

1

জাভা 7, 373 343 334 303 268 বাইট

import java.math.*;class M{public static void main(String[]a){BigInteger n,i,o,r=new BigInteger(a[0]);for(r=r.add(o=r.ONE);;r=r.add(o)){for(n=r,i=o.add(o);i.compareTo(n)<0;n=n.mod(i).compareTo(o)<0?r.ZERO:n,i=i.add(o));if(n.compareTo(o)>0)break;}System.out.print(r);}}

-75 বাইট ধন্যবাদ @ পোকে ধন্যবাদ

Ungolfed:

import java.math.*;
class M{
  public static void main(String[] a){
    BigInteger n,
               i,
               o,
               r = new BigInteger(a[0]);
    for(r = r.add(o = r.ONE); ; r = r.add(o)){
      for(n = r, i = o.add(o); i.compareTo(n) < 0; n = n.mod(i).compareTo(o)< 0
                                                        ? r.ZERO
                                                        : n,
                                                   i = i.add(o));
      if(n.compareTo(o) > 0){
        break;
      }
    }
    System.out.print(r);
  }
}

এখানে চেষ্টা করুন।

কিছু উদাহরণ ইনপুট / আউটপুট:

7 -> 11
1609 -> 1613
104723 -> 104729

@ পোকে আমি staticক্ষেত্র এবং পদ্ধতিতে যোগ করে আরও 31 বাইট গল্ফ করেছি p, তবে পদ্ধতি cএবং pপরামিতি সরিয়েছি ।
কেভিন ক্রুইজসেন 16

0

কিউবিআইসি , 34 বাইট

:{a=a+1[2,a/2|~a%b=0|b=a]]~a<b|_Xa

এই কিউবিআইসি আদিমতার পরীক্ষককে ভিত্তি করে । ব্যাখ্যা:

:{a=a+1    Read 'a' from the command line, start an infinite loop 
           and at the start of each iteration increment 'a'
[2,a/2|    FOR b = 2, b <= a/2, b++
~a%b=0|    IF b cleanly divides a, we're no prime
b=a]]      so, break out of the FOR loop ( ]] = End if, NEXT )
~a<b|      If the FOR loop completed without breaking
_Xa        then quit, printing the currently tested (prime) number
           The second IF and the DO-loop are implicitly closed by QBIC.

0

জাভাস্ক্রিপ্ট (ES7), 61 বাইট

a=>{for(;a++;){for(c=0,b=2;b<a;b++)a%b||c++;if(!c)return a;}}

ব্যবহার

f=a=>{for(;a++;){for(c=0,b=2;b<a;b++)a%b||c++;if(!c)return a;}}
f(2)

আউটপুট

3

দুর্দান্ত, তবে আমি মনে করি না এটি কাজ করবে, কারণ জাভাস্ক্রিপ্ট নিজেই (কম্পিউটার নয়) কেবল 2 ^ 53 এর পরে নির্ভুলতা হারাবে।
ETH প্রোডাকশনগুলি

আপনি ঠিক বলেছেন, তবে আমি মনে করি না যে এই সীমাটি এড়ানো যেতে পারে, এমনকি যদি আমরা একটি অ্যারেতে 32 বিটের অংশে সংখ্যা বিভক্ত করি, কারণ শেষ পর্যন্ত, সংখ্যাটি পুরো প্রক্রিয়া করা প্রয়োজন। কীভাবে এটি সমাধান করবেন সে সম্পর্কে আপনার যদি ধারণা থাকে তবে দয়া করে আমাকে জানান।
লুক 13

1
স্বেচ্ছাসেবী-নির্ভুল গণিতের জন্য জেএস লাইব্রেরি রয়েছে - আমি এমনকি কিছু সময়ে একটি তৈরি করেছি - তাই আমি নিশ্চিত যে এটি সম্ভব। পরের বার আমি আমার কম্পিউটারে যাব
ETH প্রোডাকশনস

আমি কিছু গুগলিং করেছি, এবং এটি আকর্ষণীয় বলে মনে হচ্ছে। আমি এটি একটি গুলি করব।
লুক

0

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

_Yq 

ফাংশনটি Yqযদি ইনপুটটি নেতিবাচক হয় তবে ইনপুটটির পরম মানের পরবর্তী প্রাইমকে ফেরত দেয় যাতে আমরা স্পষ্টভাবে ইনপুটটি ধরি, এটিকে অবহেলা করব ( _) এবং পরবর্তী প্রাইমটি ব্যবহার করে সন্ধান করব Yq

অনলাইনে চেষ্টা করে দেখুন!


0

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

f n=[i|i<-[n..],all((>0).rem i)[2..i-1]]!!1

নিষ্ঠুর বল জন্য সাধারণ কোড।

অবশ্যই এটি পরের বৃহত্তম ক্ষুদ্রতম সংখ্যার সন্ধান করে n। এর চেয়ে বড় কোন প্রধানমন্ত্রী নেই।

এন > 0 এর জন্য কাজ করে ।

সম্পাদনা: অনুমান nপ্রধান হয়। ধন্যবাদ @Laikoni 's পরামর্শ মন্তব্য


আপনি প্রতিস্থাপন দ্বারা একটি বাইট সংরক্ষণ করতে পারবেন head[...]সঙ্গে [...]!!0। তবে আমি মনে করি যে nএটি একটি প্রধান হিসাবে ধরে নিতে পারে , আপনি এর [n..]পরিবর্তে ব্যবহার করতে পারেন [n+1..]এবং তারপরে দ্বিতীয় উপাদানটি সাথে নিতে পারেন [...]!!1
লাইকনি

0

সিম্পিম্পেল্পলেট, 132 বাইট

অ্যালগরিদমটি ভয়ানক, যেহেতু একটি সংখ্যা প্রাইম কিনা তা পরীক্ষা করার জন্য আমাকে নিজের কোড করতে হবে।
এটি ভয়াবহ প্রমাণিত, কিন্তু কাজ করে।

{@setY argv.0}{@setX 1}{@whileX}{@setX}{@set+T Y,-1}{@for_ from2 toT}{@ifY is multiple_}{@incX}{@/}{@/}{@ifX}{@incY}{@/}{@/}{@echoY}

ফলাফলটি আউটপুট করে প্রথম আর্গুমেন্ট হিসাবে নম্বরটি প্রাপ্ত করে।


Ungolfed:

{@set number argv.0}
{@set remainder 1}
{@while remainder}
    {@set remainder 0}
    {@set+ tmp number, -1}
    {@for divisor from 2 to tmp}
        {@if number is multiple divisor}
            {@inc by 1 remainder}
        {@/}
    {@/}
    {@if remainder}
        {@inc by 1 number}
    {@/}
{@/}
{@echo number}

কীভাবে শেষটি সরিয়ে ফেলতে হয় তার কোনও পরামর্শ @if?


0

লুয়া, 876 বাইট

function I(a)a.s=a.s:gsub("(%d)(9*)$",function(n,k)return tostring(tonumber(n)+1)..("0"):rep(#k)end)end function D(a)a.s=a.s:gsub("(%d)(0*)$",function(n,k)return tostring(tonumber(n)-1)..("9"):rep(#k)end):gsub("^0+(%d)","%1")end function m(a,b)local A=K(a)local B=K(b)while V(0,B)do D(A)D(B)end return A end function M(a,b)local A=K(a)local B=K(b)while V(m(B,1),A)do A=m(A,B)end return A end function l(n)return#n.s end function p(a)local A=K(a)local i=K(2)while V(i,A)do if V(M(A,i),1)then return false end I(i)end return true end function V(b,a)A=K(a)B=K(b)if l(A)>l(B)then return true end if l(B)>l(A)then return false end for i=1,l(A)do c=A.s:sub(i,i)j=B.s:sub(i,i)if c>j then return true elseif c<j then return false end end return false end function K(n)if(type(n)=='table')then return{s=n.s}end return{s=tostring(n)}end P=K(io.read("*n"))repeat I(P)until p(P)print(P.s)

লুয়া, অন্য কয়েকটি ভাষার মতো নয়, একটি পূর্ণসংখ্যার আকার হয়। একবার একটি সংখ্যা 2 এর চেয়ে বড় হয় 32-এর জিনিসগুলি সঠিকভাবে কাজ করা বন্ধ করে দেয় এবং লুয়া সঠিক মানের পরিবর্তে অনুমান করার চেষ্টা শুরু করে।

এর মতো, আমাকে সংখ্যা সংরক্ষণের একটি নতুন পদ্ধতি প্রয়োগ করতে হয়েছিল, বিশেষত, আমি এগুলিকে বেস 10 স্ট্রিং হিসাবে সংরক্ষণ করেছি, কারণ লুয়ার স্ট্রিংগুলিতে মেমরির আকার ছাড়া অন্য কোনও আকারের সীমা থাকে না।

আমি মনে করি এই উত্তরটি প্রশ্নের আত্মার কাছে অনেক বেশি, কারণ এটি নিজেরাই স্বেচ্ছাচারিত নির্ভুলতা পূর্ণসংখ্যার পাশাপাশি একটি প্রধান পরীক্ষার বাস্তবায়ন করতে হবে।

ব্যাখ্যা

-- String Math
_num = {}

_num.__index = _num

-- Increase a by one.
-- This works by grabbing ([0-9])999...$ from the string.
-- Then, increases the first digit in that match, and changes all the nines to zero.
-- "13", only the "3" is matched, and it increases to 1.
-- "19", firstly the 1 is turned to a 2, and then the 9 is changed to a 0.
-- "9" however, the 9 is the last digit matched, so it changes to "10"
function _num.inc(a)
    a.str = a.str:gsub("(%d)(9*)$",function(num,nines)
            return tostring(tonumber(num)+1)..("0"):rep(#nines)
        end)
end


-- Decrease a by one
-- Much like inc, however, uses ([0-9])0...$ instead.
-- Decrements ([0-9]) by one and sets 0... to 9...
-- "13" only the "3" is matched, and it decreases by one.
-- "10", the "1" is matched by the ([0-9]), and the 0 is matched by the 0..., which gives 09, which is clipped to 9.
function _num.dec(a)
    a.str = a.str:gsub("(%d)(0*)$",function(num,zeros)
        return tostring(tonumber(num)-1)..("9"):rep(#zeros)
    end)         :gsub("^0+(%d)","%1")
end

-- Adds a and b
-- Makes A and B, so that the original values aren't modified.
-- B is then decremented until it hits 0, and A is incremented.
-- A is then returned.
function _num.__add(a,b)
    local A = str_num(a)
    local B = str_num(b)
    while B > 0 do
        A:inc()
        B:dec()
    end
    return A
end

-- Subs b from a
-- Works just like Addition, yet Dec's A instead of Incs.
function _num.__sub(a,b)
    local A = str_num(a)
    local B = str_num(b)
    while B > 0 do
        A:dec()
        B:dec()
    end
    return A
end

-- A % B
-- Makes A and B from a and b
-- Constantly subtracts B from A until A is less than B
function _num.__mod(a,b)
    local A = str_num(a)
    local B = str_num(b)
    while A >= B do
        A = A - B
    end
    return A
end

-- #a
-- Useful for golfiness
function _num.__len(n)
    return #n.str
end

-- Primacy Testing
-- Generates A from a and i from 2.
-- Whilst i is less than A, i is incremented by one, and if A % i == 0, then it's not a prime, and we return false.
-- Once that finishes, we return true.
function _num.isprime(a)
    local A = str_num(a)
    local i = str_num(2)
    while i < A do
        if A%i < 1 then
            return false
        end
        i:inc()
    end
    return true
end

-- b < a
-- A and B are generated from a and b
-- Fristly, if the length of A and B aren't equal, then that result is output.
-- Otherwise, each character is searched from left to right, the moment they are unequal, the difference is output.
-- If all the characters match, then it's equal. Return false.
function _num.__lt(b,a)
    A=str_num(a)
    B=str_num(b)
    if #A > #B then
        return true
    end
    if #B > #A then
        return false
    end
    for i=1, #A.str do
        As = A.str:sub(i,i)
        Bs = B.str:sub(i,i)
        if As > Bs then
            return true
        elseif As < Bs then
            return false
        end
    end
    return false
end


-- b <= a
-- Same as b < a, but returns true on equality.
function _num.__le(b,a)
    A=str_num(a)
    B=str_num(b)
    if #A > #B then
        return true
    end
    if #B > #A then
        return false
    end
    for i=1, #A.str do
        As = A.str:sub(i,i)
        Bs = B.str:sub(i,i)
        if As > Bs then
            return true
        elseif As < Bs then
            return false
        end
    end
    return true
end

-- Just straight up returns it's string component. Endlessly faster than the int equivalent, mostly because it never is anything _but_ the string form.
function _num.__tostring(a)
    return a.str
end

-- Just set up the metatable...
function str_num(n)
    if(type(n)=='table')then
        return setmetatable({str = n.str}, _num)
    end
    return setmetatable({str = tostring(n)}, _num)
end

-- Generate a new str_num from STDIN
Prime = str_num(io.read("*n"))

-- This is handy, because it will call Prime:inc() atleast once, and stop at the next prime number it finds.
-- Basically, if it weren't for all that overhead of making the math possible, that's all this would be.
repeat
    Prime:inc()
until Prime:isprime()
print(Prime)

যদিও উপরেরগুলি প্রকৃত উত্তরের মতো কেবল নিয়মিত ফাংশনগুলির পরিবর্তে মেটাটেবলগুলি ব্যবহার করে, যা আরও কম কাজ করে।


0

রুবি, 28 + 6 = 34 বাইট

-rprimeপতাকা ব্যবহার করে ।

f=->i{i+=1;i.prime??i :f[i]}

31 + 6 = 37 বাইটের জন্য নন-রিকার্সিভ সংস্করণ:

->i{i+=1;i+=1 while i.prime?;i}

0

পাইথন + প্রাইমফ্যাক , 34 32 বাইট

ব্যবহার হিসাবে যথেষ্ট সংক্ষিপ্ত নয় sympy(অন্য উত্তর ইতিমধ্যে এটি ব্যবহার করে), তবে এটি এখনও বেশ সংক্ষিপ্ত এবং এটি অনেক বেশি দ্রুত।

import primefac as p
p.nextprime

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

ইনপুট 2**2000কয়েক সেকেন্ডে সম্পূর্ণ হয়।


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