গিলব্রথের ধারণা


18

মনে করুন আমরা মৌলিক সংখ্যার অসীম তালিকা দিয়ে শুরু করি:

[2, 3, 5, 7, 11, 13, 17, 19, 23, 29, 31, 37, 41, 43, 47, 53, 59, 61, 67, 71, ...

তারপরে, আমরা বারবার সংখ্যার প্রতিটি সংখ্যার মধ্যে পরম পার্থক্য নিই:

[1, 2, 2, 4, 2, 4, 2, 4, 6, 2, 6, 4, 2, 4, 6, 6, 2, 6, 4, ...
[1, 0, 2, 2, 2, 2, 2, 2, 4, 4, 2, 2, 2, 2, 0, 4, 4, 2, ...
[1, 2, 0, 0, 0, 0, 0, 2, 0, 2, 0, 0, 0, 2, 4, 0, 2, ...
[1, 2, 0, 0, 0, 0, 2, 2, 2, 2, 0, 0, 2, 2, 4, 2, ...

লক্ষ্য করুন যে প্রতিবারের শীর্ষস্থানীয় সংখ্যা 1। গিলব্রথের কনজেকচারটি ভবিষ্যদ্বাণী করে যে এটি চিরকাল স্থায়ী হয়।

শীর্ষস্থানীয় সংখ্যাটি 1 হওয়া বন্ধ করে দেওয়ার একমাত্র উপায় হ'ল যদি পরবর্তী সংখ্যাটি 0 বা 2 না হয় 2 হয় তবে দ্বিতীয় সংখ্যাটি 0 বা 2 না হওয়ার একমাত্র উপায় হ'ল যদি তার পরে সংখ্যাটি একটিও না হয় 0 বা একটি 2. এবং তাই।

প্রথম দিকের সংখ্যার সূচক, শীর্ষস্থানীয় 1 ব্যতীত, যা কোনও 0 বা 2 নয়, ক্রমাগত জোড় ক্রমগুলির মধ্যে কখনও 1 এর বেশি নেমে যেতে পারে না। এই সত্যটি একটি খুব শক্তিশালী নিম্ন বাঁধার উপর চাপতে ব্যবহৃত হয়, যদি কখনও হয় তবে কোনও অনুক্রম প্রথম উপাদান হিসাবে 1 নাও থাকতে পারে।

এই চ্যালেঞ্জে আপনাকে একটি সিক্যুয়েন্সের সূচি দেওয়া হবে এবং আপনাকে অবশ্যই প্রথম ক্রমের প্রথম সংখ্যাটির সূচকটি আউটপুট দিতে হবে যা অগ্রণী 1 নয়, এবং 0 বা 2 নয়।

উদাহরণস্বরূপ, উপরের চতুর্থ পার্থক্য ক্রমটিতে:

[1, 2, 0, 0, 0, 0, 2, 2, 2, 2, 0, 0, 2, 2, 4, 2, ...

প্রথম এন্ট্রি যা কোনও শূন্য বা দুটি নয়, প্রথম এন্ট্রি ব্যতীত, 15 তম অবস্থান, 14 শূন্য সূচীযুক্ত। সুতরাং যদি ইনপুট 4 হয়, আপনি 14 আউটপুট হবে।

1 থেকে 30 এর ইনপুটগুলির জন্য, আউটপুটগুলি হওয়া উচিত:

[3, 8, 14, 14, 25, 24, 23, 22, 25, 59, 98, 97, 98, 97, 174, 176, 176, 176, 176, 291, 290, 289, 740, 874, 873, 872, 873, 872, 871, 870]

এটি OEIS A000232

এটি ধরে নেওয়া হচ্ছে আপনার কাছে 1 টি ইনডেক্সড ইনপুট এবং 0 ইনডেক্সড আউটপুট রয়েছে। আপনি যে কোনও ধ্রুবক পূর্ণসংখ্যার সাথে শুরু করে আপনার ইনপুট এবং আউটপুটগুলি সূচক করতে পারেন, যতক্ষণ না আপনি সমস্ত ক্রমগুলির সাথে সম্পর্কিত ইনপুটগুলির পরিসীমা গ্রহণ করতে পারেন।

প্রয়োজনীয়তা: আপনার সমাধানটি 30 টি পর্যন্ত ইনপুটটিতে সর্বাধিক 1 মিনিটে চলতে হবে it's এটি যদি কম্পিউটারের চশমার উপর নির্ভর করে যথেষ্ট পরিমাণে থাকে তবে এটি অনুমোদিত।

সংক্ষিপ্ততম কোড জিতেছে।


আমি কি আমার ইনপুটটি 2-সূচী করতে পারি?
লিকি নুন

পছন্দ করুন
isaacg

আউটপুট কি ইনপুট- ভিত্তিক সূচক ব্যবহার করতে পারে ?
লুইস মেন্ডো

@ লুইস মেন্ডো সঠিক, স্থির। না, সূচক অবশ্যই একটি ধ্রুবক হতে হবে।
isaacg

উত্তর:



4

গণিত, 66 বাইট

(For[z=1,Last@Nest[Abs@*Differences,Array[Prime,z+#],#]<3,z++];z)&

খাঁটি ফাংশনটি আর্গুমেন্ট হিসাবে ইতিবাচক পূর্ণসংখ্যার গ্রহণ করে এবং 1-সূচকযুক্ত পূর্ণসংখ্যা ফেরত দেয়। প্রথম প্রাইমগুলির তালিকার তৃতীয় পুনরাবৃত্ত পরম পার্থক্য তালিকার Nest[Abs@*Differences,Array[Prime,z+#],#]গণনা করে । ফলাফলের তালিকার শেষ উপাদানটি অন্ততপক্ষে না হওয়া পর্যন্ত এই গণনাটি লুপ করে এবং তারপরে আউটপুট হয়। (দ্রষ্টব্য যে অ্যালগরিদমের যথার্থতা গিলব্রেথের অনুমানকে ধরে নিয়েছে!)#z+#For[z=1,Last@...<3,z++]3z



2

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

`@:YqG:"d|]3<A}@G-

ইনপুট এবং আউটপুট 1-ভিত্তিক। প্রতিটি পরীক্ষার ক্ষেত্রে টিআইওতে 40 সেকেন্ডেরও কম সময় লাগে।

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

ব্যাখ্যা

এটি পুনরায় প্রাইমগুলির প্রাথমিক ক্রমগুলির চেষ্টা চালিয়ে যায় যতক্ষণ না পুনরাবৃত্ত পরম পর পর পার্থক্যগুলি কমপক্ষে একটি মান ছাড়িয়ে যায় 2

`        % Do... while loop
  @:Yq   %   Array of first k primes, where k is iteration index
  G:"    %   Do this as many times as the input
    d|   %     Absolute value of consecutive differences
  ]      %   End
  3<A    %   Are they all less than 3? This is the loop condition
}        % Finally (execute before exiting loop)
  @G-    %   Push last iteration index minus input. This is the output
         % End (implicit). Continue with next iteration if top of stack is true
         % Display (implicit)

1

পার্ল 6 , 136 120 বাইট

{->\i,\n{i??&?BLOCK(i-1,lazy
n.rotor(2=>-1).map: {abs .[1]-.[0]})!!1+n.skip.first:
:k,none 0,2}($_,grep &is-prime,2..*)}

Ungolfed:

{   # Anonymous function with argument in $_
    sub f(\i, \n) {  # Recursive helper function
        if i != 0 {  # If we're not done,
            # Recurse on the absolute differences between adjacent entries:
            f(i - 1, lazy n.rotor(2 => -1).map: { abs .[1] - .[0] });
        } else {
            # Otherwise, return the first index after 0
            # where the value is neither 0 nor 2.
            1 + n.skip.first: :k, none 0, 2;
        }
    }
    # Call the helper function with the argument passed to the top-level
    # anonymous function (the recursion depth), and with the prime numbers
    # as the initial (infinite, lazy) list:
    f($_, grep &is-prime, 2 .. *);
}

30 এর ইনপুট সহ, ফাংশনটি আমার পরিমিত ল্যাপটপে প্রায় চার সেকেন্ডের মধ্যে চলে।

... যা আমার সাত-মাস বয়সী পার্ল 6 ইনস্টলেশনটি আপগ্রেড করার পরে 1.4 সেকেন্ডে পরিণত হয় (এটি আমাকে এমন skipপদ্ধতি দেয় যা আমাকে আমার প্রথম সমাধান থেকে কয়েকটি বাইট ছাঁটাতে দেয়)। 1 থেকে 30 পর্যন্ত সমস্ত পরীক্ষার ক্ষেত্রে প্রায় দশ সেকেন্ড সময় লাগে।


1

হাস্কেল , 94 বাইট

f(a:b:r)=abs(a-b):f(b:r)
length.fst.span(<3).(iterate f[n|n<-[2..],all((>0).mod n)[2..n-1]]!!)

এটি অনলাইন চেষ্টা করুন! শেষ লাইনটি একটি বেনামি ফাংশন। যেমন বাঁধা gএবং কল কল g 4। সমস্ত পরীক্ষার কেস টিআইওতে 2 সেকেন্ডেরও কম সময় নেয়।

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

[n|n<-[2..],all((>0).mod n)[2..n-1]]প্রাইমগুলির অসীম তালিকা তৈরি করে।
f(a:b:r)=abs(a-b):f(b:r)অসীম তালিকার উপাদানগুলির পরম পার্থক্য অর্জন করে এমন একটি ফাংশন। একটি নম্বর দেওয়া n, (iterate f[n|n<-[2..],all((>0).mod n)[2..n-1]]!!)প্রযোজ্য f nমৌলিক সংখ্যার লিস্টে বার। length.fst.span(<3)উপাদানগুলি ছোট 3 যেখানে ফলাফলের তালিকার উপসর্গের দৈর্ঘ্য গণনা করে।


0

অ্যাক্সিয়াম, 289 বাইট

g(n:PI):PI==(k:=n*10;c:List NNI:=[i for i in 1..(k quo 2)|prime?(i)];repeat(a:=concat(c,[i for i in (k quo 2+1)..k|prime?(i)]);j:=0;c:=a;repeat(j=n=>break;j:=j+1;b:=a;a:=[abs(b.(i+1)-b.i)for i in 1..(#b-1)]);j:=2;repeat(j>#a=>break;a.j~=2 and a.j~=1 and a.j~=0=>return j-1;j:=j+1);k:=k*2))

এটি পরীক্ষা এবং পরীক্ষা

f(n:PI):PI==
  k:=n*10
  c:List NNI:=[i for i in 1..(k quo 2)|prime?(i)]
  repeat
    a:=concat(c,[i for i in (k quo 2+1)..k|prime?(i)])
    j:=0;c:=a
    repeat
       j=n=>break
       j:=j+1
       b:=a
       a:=[abs(b.(i+1)-b.i)  for i in 1..(#b-1)]
    j:=2
    repeat
       j>#a=>break
       a.j~=2 and a.j~=1 and a.j~=0 => return j-1
       j:=j+1
    k:=k*2

(4) -> [g(i)  for i in 1..30]
   (4)
   [3, 8, 14, 14, 25, 24, 23, 22, 25, 59, 98, 97, 98, 97, 174, 176, 176, 176,
    176, 291, 290, 289, 740, 874, 873, 872, 873, 872, 871, 870]

এটি যদি সমাধানটি খুঁজে না পায় তবে একটি লুপে 2 * x এর প্রাইম তালিকাটি প্রসারিত করুন এবং সমস্ত অবশিষ্ট তালিকা পুনরুদ্ধার করুন। জি সন্ধানের জন্য 3 সেকেন্ড (30)

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