A083569: মি + এন প্রাইম হ'ল এর আগে সবচেয়ে ছোট এম হবে না ring


26

নীচে 1-ইনডেক্সেড ক্রম সংজ্ঞায়িত করুন:

  • A083569(1) = 1
  • A083569(n)যেখানে nপূর্ণসংখ্যার চেয়ে বড় হয় 1, এটি হল সবচেয়ে ছোট পূর্ণসংখ্যার মি যা এর আগে ঘটে না যা m+nএটি একটি মৌলিক সংখ্যা।

আপনার কাজটি গ্রহণ করা nএবং ফিরে আসা A083569(n)

 n  A083569(n)
 1  1
 2  3
 3  2
 4  7
 5  6
 6  5
 7  4
 8  9
 9  8
10 13
11 12
12 11
13 10
14 15
15 14
16 21
17 20
18 19
19 18
20 17

আরও টেস্টকেস এখানে পাওয়া যাবে । ওইআইএস-এর মূল ক্রমটি এখানে পাওয়া যাবে

এটি । বাইট জিতে সংক্ষিপ্ত উত্তর। স্ট্যান্ডার্ড লুফোলস প্রযোজ্য।


@ মিঃ এক্সকোডার "1-ইনডেক্সেড ক্রমটি নীচের হিসাবে সংজ্ঞায়িত করুন"
লিকি নুন

উত্তর:


14

হাস্কেল , 87 86 83 80 74 69 বাইট

এক্সনরকে 3 টি বাইট সংরক্ষণ করা এমন কিছু পরিবর্তন প্রস্তাব দেওয়ার জন্য ধন্যবাদ!

f n=[m|m<-[1..],all((>0).mod(n+m))[2..n+m-1],all((/=m).f)[1..n-1]]!!0

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

আমি হাসকেলে নতুন, এবং হাস্কেল গল্ফিং, প্রতিক্রিয়া প্রশংসা করা হয়েছে!

ব্যাখ্যা

আমরা একটি ফাংশন সংজ্ঞায়িত করি f n। আমরা f nতালিকার প্রথম উপাদান !!0হিসাবে সংজ্ঞায়িত করেছি :

[m|m<-[1..],all((>0).mod(n+m))[2..n+m-1],all((/=m).f)[1..n-1]]

ভেঙে গেছে যে:

[m|          # Numbers m
m<-[1..],    # From the integers greater than 0
all          # Forall x
(>0).mod(n+m)# n+m mod x is not zero
[2..n+m-1]   # from the integers from 2 to n+m-1
all          # Forall
((/=m).f)    # when f is applied the result is not m
[1..n-1]     # from the integers from 1 to n-1

3
হাস্কেল গল্ফিংয়ে আপনাকে স্বাগতম! [2,3..]শুধু হতে পারে [2..], 1 দ্বারা আপ গণনা পূর্বনির্ধারিত। একটি অন্তর্নির্মিত আছে notElem
xnor

@ এক্সনোর ধন্যবাদ! আমি ব্যবহারের আরও ভাল উপায় খুঁজে পেয়েছি notElemতবে প্রথম টিপটি সহায়ক ছিল এবং আমি দ্বিতীয়টি আমার পিছনের পকেটে রাখার বিষয়টি নিশ্চিত করব।
গম উইজার্ড

দেখে মনে হচ্ছে আপনার নতুন সংস্করণটি f 1ভুল হয়ে গেছে, 1 হওয়া উচিত
xnor

@ এক্সনোর ফিক্সড, দুর্ভাগ্যক্রমে 3 বাইটের দামে।
গম উইজার্ড

6

জেলি , 16 15 বাইট

Rɓ²R+⁸ÆPTḟḢṭµ/Ṫ

এটি ধরে নেয় A083569 (n) ≤ n² (ক্রমটি ধারাবাহিকভাবে বাড়ছে বলে মনে হচ্ছে)।

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

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

Rɓ²R+⁸ÆPTḟḢṭµ/Ṫ  Main link. Argument: n

R                Range; yield [1, ..., n].
 ɓ               Begin a dyadic chain with swapped arguments.
            µ/   Reduce the range by that chain.
                 If we call the chain f, this computes f(2,1), then f(3,f(2,1)),
                 then f(4,f(3,f(2,1)), etc.
                 The left argument is an integer k, the right one an array A.
  ²                Square; yield k².
   R               Range; yield [1, ..., k²].
    +⁸             Add k, yielding [1+k, ..., k²+k].
      ÆP           Test each sum for primality.
        T          Truth; get all indices of 1‘s. This finds all m in [1, ..., k²]
                   such that m+k is prime.
         ḟ         Filterfalse; remove all resulting elements that appear in A.
          Ḣ        Head; extract the first remaining result.
           ṭ       Tack; append the extracted integer to A.
                 This computes the first n elements of the sequence.
              Ṫ  Tail; extract the last, n-th element.

4
প্রকৃতপক্ষে, এর সংজ্ঞা অনুসারে A083569(n)সর্বাধিক প্রথম nপ্রধান বৃহত্তর n, যা সর্বাধিক 2nতম প্রধান, যা (এর জন্য n≥3) 4n*log(n)রোজার-শোএনফিল্ডের ফলাফলের চেয়ে কম ।
গ্রেগ মার্টিন

@ গ্রেগমার্টিন এটি যাচাই করার সময়, এটি করা এখনও একটি সুন্দর বন্য অনুমান ...
এসোসোলিং ফলের

4
@ চ্যালেঞ্জার 5 আমি "শিক্ষিত অনুমান" পছন্দ করি।
ডেনিস

6

পাইথ - 18 17 15 বাইট

আমাকে দুটি বাইট বাঁচানোর জন্য @ আইসএইচজি ধন্যবাদ!

এই সাইটে ফিরে কিছুক্ষণ ব্যস্ত থাকার পরে, আশা করি এটি আরও গল্ফ করবে।

esmaYf&-TYP_+Th

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


4
পিপিসিজিতে আপনাকে স্বাগতম!
ফাঁস নুন

@ লাকিউন ধন্যবাদ :)
মালটিসেন

1
-TYএটি এক বাইটের চেয়ে ছোট !/YTএবং একই ক্ষেত্রে সত্যবাদী।
isaacg

আপনি পরিবর্তন করে অন্য বাইট সংরক্ষণ করতে পারবেন +hdTকরার +Th
isaacg

@ আইস্যাক, ওহ, এটি কোনও তালিকায় প্রথম উপাদানটি ফেলেছে? ওটা সত্যিই ভালো.
মাল্টেসেন

3

সি # (.নেট কোর) , 169 বাইট

n=>{if(n<2)return 1;var p=new int[n-1];int i=0,j,s;for(;i<n-1;)p[i]=f(++i);for(i=1;;i++){for(j=2,s=i+n;j<s&&s%j++>0;);if(j==s&!System.Array.Exists(p,e=>e==i))return i;}}

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

ফলাফল নিরূপণ করা পর্যন্ত সবচেয়ে অদক্ষ উপায় দ্বারা, তাই গণক থেকে বিরত থাকুন f(n)জন্য n>=30এই কোড দিয়ে। প্রথম পদক্ষেপটি হ'ল মানগুলি থেকে পুনরাবৃত্তভাবে গণনা করা f(1)হয় f(n-1)এবং তারপরে f(n)প্রথমটির iমতো যা n+iপ্রধান এবং iপূর্ববর্তী মান তালিকায় নেই তা অনুসন্ধান করে গণনা করতে এগিয়ে যেতে ।


3

x86-64 বিধানসভা, 57 55 বাইট

আমি গল্ফ করতে নতুন, তাই মন্তব্য / প্রতিক্রিয়া প্রশংসা করা হয়।

দ্রষ্টব্য: এটি মেশিন কোড দৈর্ঘ্যের জন্য উত্সযুক্ত, উত্স দৈর্ঘ্যের জন্য নয়।

0: 89 f8 ff cf 74 32 97 89 fe 89 f1 ff c6 89 f0 99
1: f7 f1 85 d2 e0 f7 85 c9 75 ed 89 f9 ff c9 56 29
2: fe 56 57 51 89 fc e8 d3 ff ff ff 59 5f 5e 39 c6
3: e0 ef 96 5e 74 d1 c3

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

সূত্র:

    .globl a083569
    // edi = original, probably don't touch
    // esi = candidate prime, if it's not a repeat we return edi-this
a083569:
    mov %edi, %eax
    dec %edi
    jz end
    xchg %eax, %edi
    mov %edi, %esi
primecheck:
    mov %esi, %ecx
    inc %esi
primeloop:
    mov %esi, %eax
    cdq
    div %ecx
    test %edx, %edx
    loopnz primeloop
/* end */
    // if esi isn't prime, then ecx is now one or greater.
    test %ecx, %ecx
    jnz primecheck
    // esi is now our target prime: check if it's not already one
    mov %edi, %ecx
    dec %ecx
    push %rsi   /* we need a flag-safe way to restore this later */
    sub %edi, %esi
chkdup:
    push %rsi
    push %rdi
    push %rcx
    mov %ecx, %edi
    call a083569
    pop %rcx
    pop %rdi
    pop %rsi
    cmp %eax, %esi
    loopne chkdup
/* end loop - chkdup */
    xchg %esi, %eax
    pop %rsi
    je primecheck
/* end outer loop - primecheck */
end:
    ret

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


1

ক্লোজার, 158 155 বাইট

#(loop[r[0 1]i 1](if(= i %)(last r)(recur(conj r(nth(for[j(range):when(=((set r)j)(seq(for[k(range 2(+ 1 i j)):when(=(mod(+ 1 i j)k)0)]j)))]j)0))(inc i))))

এটি এখনও কিছুটা চর্বিযুক্ত হতে পারে, আমি এতে খুব খুশি নই (+ 1 i j)তবে এটি বেস কেস n = 1এবং বাকী অংশগুলি হ্যান্ডেল করার সবচেয়ে সহজ উপায় । সেটে না থাকলেও ((set r)j)ফিরে আসে এবং খালি তালিকায় শূন্যপদেও ফিরে আসে। 48 সেকেন্ডে গণনা করা হয়।nilj(seq ())n = 1000

আপডেট: কোডটি এটি ছাড়াও সঠিকভাবে কাজ করে বলে চেক nilথেকে অপসারণ করা হয়েছে =



1

পাইথন, 194 170 110 বাইট

লিকি নুন দ্বারা সংরক্ষিত ৮৮ বাইট

ম্যাথমন্ডন দ্বারা 2 বাইট সংরক্ষণ করা

def s(n):
 a=[s(j)for j in range(1,n)];i=1
 while(i in a)|any((i+n)%j<1for j in range(2,i+n)):i+=1
 return i

একটি ফাংশন (এন) সংজ্ঞায়িত করে যা কোনও সংখ্যা ইনপুট হিসাবে গ্রহণ করে এবং A083569 (n) প্রদান করে।

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


1
আপনি এই টিআইও লিঙ্কটি অন্তর্ভুক্ত করে বিবেচনা করতে পারেন ।
ফাঁস নুন

1
আপনি প্রাথমিক p=lambda n:any(n%i<1for i in range(2,n))চেক জন্য ব্যবহার করতে পারেন ।
ফাঁস নুন


1
আপনি বিটওয়াইস ব্যবহার করতে পারেন বা একটি দম্পতি বাইট সংরক্ষণ করতে পারেন:while(i in a)|any(...
mathmandan
আমাদের সাইট ব্যবহার করে, আপনি স্বীকার করেছেন যে আপনি আমাদের কুকি নীতি এবং গোপনীয়তা নীতিটি পড়েছেন এবং বুঝতে পেরেছেন ।
Licensed under cc by-sa 3.0 with attribution required.