ক্ষুদ্রতম ধনাত্মক পূর্ণসংখ্যা যা শেষ দুই পূর্বসূরীদের কাছে স্বীকৃত এবং এখনও উপস্থিত হয়নি; a (1) = 1, a (2) = 2


10

সংজ্ঞা

  • দুটি পূর্ণসংখ্যার কপিরাইট হয় যদি তারা ব্যতীত কোনও ইতিবাচক সাধারণ বিভাজন ভাগ না করে 1
  • a(1) = 1
  • a(2) = 2
  • a(n)ক্ষুদ্রতম ধনাত্মক পূর্ণসংখ্যা যা coprime হয় a(n-1)এবং a(n-2)এবং এখনো হাজির করেনি, পূর্ণসংখ্যা জন্য n >= 3

কার্য

  • ধনাত্মক পূর্ণসংখ্যা n, আউটপুট / মুদ্রণ দেওয়া হয়েছে a(n)

উদাহরণ

  • a(11) = 6কারণ 6শেষ দুটি পূর্বসূরীর (যথা, 11এবং 13) কপিরাইট এবং 6এর আগে উপস্থিত হয়নি।

মন্তব্য

  • নোট করুন যে ক্রমটি আরোহী নয়, যার অর্থ কোনও উপাদান তার পূর্বসূরীর চেয়ে ছোট হতে পারে।

চশমা

  • আপনার অবশ্যই 1-ইনডেক্সেড ব্যবহার করা উচিত

Testcases

n      a(n)
1      1
2      2
3      3
4      5
5      4
6      7
7      9
8      8
9      11
10     13
11     6
12     17
13     19
14     10
15     21
16     23
17     16
18     15
19     29
20     14
100    139
1000   1355
10000  13387
100000 133361

স্কোরিং

  • যেহেতু কপিরাইমের অর্থ এই যে দুটি সংখ্যা কেবল একটি বিভাজক ( 1) ভাগ করে এবং 1একটি ছোট সংখ্যা, তাই আপনার কোড বাইট-কাউন্টের ক্ষেত্রে যতটা সম্ভব ছোট হওয়া উচিত।

তথ্যসূত্র


4
সংক্ষিপ্ত কোডের জন্য সেই "কারণগুলি" ...
লুইস মেন্ডো

1
আমি অবাক হলাম কেন এটিকে অবহেলা করা হয়েছিল। নিশ্চয়ই ভয়াবহ যৌক্তিকতার কারণে নয়?
কনর

পছন্দ করুন আসলে আমি upvated। আমি আশা করি লোকেরা যৌক্তিক হিসাবে যুক্তি এবং আমার মন্তব্য উভয়ই দেখতে পাবে
লুইস মেন্ডো

3
কোড গল্ফের জন্য এই "মজাদার" ন্যায্যতাগুলির সাথে সমস্যাটি হ'ল আমাকে স্ট্যান্ডার্ড কোড গল্ফ তা খুঁজে পেতে কেবল চারটি লাইন ছড়িয়ে একটি খারাপ রসিকতা পড়তে হবে। এটি কোনও উপযুক্ত কারণেই সহজভাবে চ্যালেঞ্জের নিয়মগুলিকে অস্পষ্ট করছে।
মার্টিন ইন্ডার

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

উত্তর:


5

পাইথন 3.5, 160 141 126 124 121 109 বাইট

এটি ক্রমের সংজ্ঞাটির একটি সাধারণ বাস্তবায়ন implementation গল্ফিং পরামর্শ স্বাগত জানাই।

সম্পাদনা করুন: -17 বাইট ধন্যবাদ লিকি নুনকে। -9 বাইট পিটার টেলর ধন্যবাদ। -6 স্পট 3000 এবং পাইথন 3.5 তে স্যুইচ করার জন্য বাইটস ধন্যবাদ।

import math;f=lambda n,r=[2,1],c=3:n<2and r[1]or(c in r)+math.gcd(c,r[0]*r[1])<2and f(n-1,[c]+r)or f(n,r,c+1)

Ungolfing:

import math
def f(n, r=[2,1], c=3):
    if n<2:
        return r[1]
    elif (c in r) + math.gcd(c,r[0]*r[1]) < 2:
        return f(n-1, [c]+r)
    else:
        return f(n, r, c+1)

পাইথন 3.5+ জন্য, import mathতারপর g=math.gcdআপনার নিজের সংজ্ঞা চেয়ে খাটো হওয়া উচিত g। 3.5 সামনে জন্য, আপনি কি করতে পারেন from fractions import*জন্য gcd
Sp3000

আপনি যদি লুপটির c=3অভ্যন্তরীণ সূচনা করেন তবে আপনাকে একবার এটি করা দরকার। আমার গণনায় আপনি 3 অক্ষর সংরক্ষণ করুন।
পিটার টেলর

অ্যারে তৈরি থেকে অন্যভাবে চার্জ করার জন্য একটি 2-চার্চের সঞ্চয় রয়েছে: আপনার r=[c]+rপরিবর্তে আপনাকে ব্যবহার করতে হবে +=, তবে তিনটি নেতিবাচক সূচক ইতিবাচক হয়ে ওঠে। এবং তারপরে ল্যাম্বডা হিসাবে পুনর্লিখন থেকে আরও 2-চর সাশ্রয় হয়েছে যদিও এটি একটি অত্যন্ত কঠোর পরিবর্তন: from fractions import*;F=lambda n,r=[2,1],c=3:n<2and r[1]or(c in r)+gcd(r[0]*r[1],c)<2and F(n-1,[c]+r)or F(n,r,c+1)এবং printএটির কোনও প্রয়োজন নেই কারণ এটি আর পুরোপুরি প্রোগ্রাম নয়।
পিটার টেলর

2

এমএটিএল , 28 27 বাইট

2:i:"`@ym1MTF_)Zdqa+}@h]]G)

কোডটি ধীর, তবে সঠিক ফলাফল দেয়।

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

কোডের একটি ছোট পরিবর্তন ক্রমের প্লট তৈরি করে:

2:i:"`@ym1MTF_)Zdqa+}@h]]G:)XG

এটি ASCII শিল্প হিসাবে বা অফলাইনে সংকলকটিতে গ্রাফিকাল আউটপুট সহ দেখুন:

এখানে চিত্র বর্ণনা লিখুন

এখানে চিত্র বর্ণনা লিখুন

ব্যাখ্যা

2:         % Push [1 2] to initiallize the sequence
i:         % Input n. Push [1 2 ... n]
"          % For loop: repeat n times
  `        %   Do while loop
    @      %     Push iteration index, starting at 1. This is the candidate number
           %     to extend the sequence
    y      %     Duplicate vector containing the sequence so far
    m      %     Is member? Gives true if the candidate is in the sequence
    1M     %     Push candidate and vector again
    TF_)   %     Get last two elements of the vector
    Zd     %     GCD between the candidate and those two elements. Produces a
           %     two-element vector
    qa     %     True if any of the two results exceeds 1, meaning
           %     the candidate is not coprime with the latest two sequence values
    +      %     Add. This corresponds to logical "or" of the two conditions, namely
           %     whether the candidate is member of the sequence so far, and
           %     whether it is not coprime with the latest two. In either case
           %     the do...while must continue with a next iteration, to try a new
           %     candidate. Else the loop is exited, and the current candidate
           %     is the new value of the sequence
  }        %   Finally (execute when the loop is exited)
    @h     %     Push current candidate and concatenate to the sequence vector
  ]        %   End do...while
]          % End for
G)         % Get n-th value of the sequence. Implicitly display

1

সি, 185 বাইট

G(a,b){return a%b?G(b,a%b):b;}
i,j,k;f(n){int a[n+2];for(i=0;i++<n;){a[i]=i<3?i:0;for(j=2;!a[i];++j){for(k=i;--k;){if(a[k]==j)++j,k=i;}a[G(a[i-1],j)*G(a[i-2],j)<2?i:0]=j;}}return a[n];}

1

আসলে , 38 37 35 33 31 30 বাইট

এটি ফাংশন সংজ্ঞা একটি সহজ বাস্তবায়ন। গল্ফিং পরামর্শ স্বাগত জানাই। এটি অনলাইন চেষ্টা করুন!

সম্পাদনা: -৩ বাইট ধন্যবাদ লিকি নুনকে ধন্যবাদ।

2R#╗,;`1";2±╜tπg@╜í+Y"£╓╖`nD╜E

Ungolfing:

2R#╗    Push [1,2] and store it in register 0
,;      Take input and duplicate
`1      Start function, push 1
  "       Start string
  ;       Duplicate i
  2±╜t    Push (list in register 0)[-2:]
  πg      gcd(i, product of list[-2:])
  @╜í     Rotate the gcd and bring up i, check for i in list (0-based, -1 if not found)
  +Y      Add the gcd and the index, negate (1 if coprime and not found in list, else 0)
  "£      End string, turn into a function
╓       Push first (1) values where f(x) is truthy, starting with f(0)
╖`      Append result to the list in register 0, end function
n       Run function (input) times
D╜E     Return (final list)[n-1]

1
স্ট্যাক ম্যানিপুলেশন অনেক বেশি
ফাঁস নুন

0

হাস্কেল, 81 73 বাইট

c l@(m:n:_)=m:c([x|x<-[1..],gcd(m*n)x<2,all(/=x)l]!!0:l)
((0:1:c[2,1])!!)

ব্যবহারের উদাহরণ: ((0:1:c[2,1])!!) 12-> 17

1-ভিত্তিক সূচক ঠিক করার জন্য a(n)শুরু করে এবং এরপরে সবার তালিকা তৈরি করুন । এর যুক্তি তালিকার শীর্ষস্থান গ্রহণ করে তারপরে একটি সংবর্তনকারী কল আসে তার পরের নম্বরগুলির সাথে ফিট করে (সহ-প্রধান, আগে দেখা যায় না) সামনে যুক্ত হয় । এই তালিকার তম উপাদানটি চয়ন করুন ।01c[2,1]clln


0

আর, 141 বাইট

 f=Vectorize(function(n)ifelse(n>3,{c=3;a=f(n-1);b=f(n-2);d=f(4:n-3);while(!c%%which(!a%%1:a)[-1]||!c%%which(!b%%1:b)[-1]||c%in%d)c=c+1;c},n))

ungolfed

f=Vectorize( function(n)     #build a recursive function. Vectorize allows
    if(n>3) {                #the function to be called on vectors.
        c=3                  #Tests size. Builds some frequent variables.
        a=f(n-1)
        b=f(n-2)
        d=f(4:n-3)           #Should really golf this out, but its horribly slow.
        while(!c%%which(!a%%1:a)[-1]||!c%%which(!b%%1:b)[-1]||c%in%d)
              c=c+1          #If we are coprime and not already seen. add.
        c
     } else n)               #First three are 1,2,3.

0

গণিত, 97 90 বাইট

a@1=1;a@2=2;a@n_:=SelectFirst[Range[2n],GCD[a[n-1]a[n-2],#]<2&&!MemberQ[a/@Range[n-1],#]&]

আমার অনুমানের ভিত্তিতে যা সবারa(n) < 2n জন্য n

দ্রুত রান পেতে, a@n=মূলটির পরে যুক্ত করুন :=যাতে ফাংশনটি আগের মানগুলি পুনরায় গণনার প্রয়োজন না হয়

সংরক্ষিত 7 Sherlock9 ধন্যবাদ বাইট (যদি gcd(a,b)=1তারপর gcd(ab,m) = gcd(a,m)*gcd(b,m))


এটি কোনও অনুমান নয়, যেহেতু ওআইআইএস পৃষ্ঠায় এটি লেখা আছে " ABS(a(n)-n) < n"
লিকি নুন

ধন্যবাদ ওআইআইএস পৃষ্ঠাটি কয়েক মুহুর্ত আগে অবধি নিচে ছিল এবং আমি বড়দের জন্য সম্ভাব্য কাউন্টারেরেক্সামাল সম্পর্কে উদ্বিগ্ন ছিলাম n

0

পাইথ, 23 বাইট

eu+Gf&-TGq1iT*F>2G1tQ]1

পরীক্ষা স্যুট

মোটামুটি সরল বাস্তবায়ন, তবে কিছু দুর্দান্ত গল্ফিং কৌশল সহ।

eu+Gf&-TGq1iT*F>2G1tQ]1
 u                 tQ]1    Apply the following function input - 1 times,
                           where G is the current state (List of values so far)
  +G                       Add to G
    f             1        The first number, counting up from 1
      -TG                  That has not been seen so far
     &                     And where
               >2G         The most recent two numbers
             *F            Multiplied together
           iT              Gcd with the current number being checked
         q1                Equals 1
e                          Output the final element of the list.
আমাদের সাইট ব্যবহার করে, আপনি স্বীকার করেছেন যে আপনি আমাদের কুকি নীতি এবং গোপনীয়তা নীতিটি পড়েছেন এবং বুঝতে পেরেছেন ।
Licensed under cc by-sa 3.0 with attribution required.