Prime ที่เล็กที่สุดพร้อม Twist (A068103)


33

งานที่ได้รับnคือค้นหาหมายเลขที่เล็กที่สุดที่เริ่มต้นด้วยAT LEAST nของตัวเลข2ที่จุดเริ่มต้นของหมายเลข นี่คือลำดับที่ฉันพบใน OEIS ( A068103 )

ตัวเลข 17 ตัวแรกในลำดับจะได้รับด้านล่างหากคุณต้องการมากขึ้นฉันจะต้องดำเนินการตามลำดับซึ่งฉันไม่สนใจ

0  = 2
1  = 2
2  = 223
3  = 2221
4  = 22229
5  = 2222203
6  = 22222223                # Notice how 6 and 7 are the same! 
7  = 22222223                # It must be **AT LEAST** 6, but no more than necessary.
8  = 222222227
9  = 22222222223             # Notice how 9 and 10 are the same!
10 = 22222222223             # It must be **AT LEAST** 9, but no more than necessary.
11 = 2222222222243
12 = 22222222222201
13 = 22222222222229
14 = 222222222222227
15 = 222222222222222043
16 = 222222222222222221

แค่คิดว่านี่จะเป็นการผสมผสานระหว่างการจัดการสตริงการค้นหาและลำดับที่ยอดเยี่ยม นี่คือจำนวนไบต์ต่ำสุดจะถูกประกาศให้ผู้ชนะทราบเมื่อสิ้นเดือน


5
มีขีด จำกัด ล่างหรือไม่ว่าเราจะต้องสนับสนุนอินพุตสูงเท่าไร?
ETHproductions

1
มีการ จำกัด เวลาหรือไม่?
Brad Gilbert b2gills

@ETHProductions ขออภัยไปค่อนข้างเร็วหลังจากเขียนอันนี้ หากคุณต้อง จำกัด การป้อนข้อมูลของคุณมีข้อ จำกัด xที่จะต้องได้รับการสนับสนุนปัญญาฮ่าตรรกะเหตุผลว่าทำไมภาษาที่ไม่สนับสนุนตัวเลขที่สูงกว่า ตัวอย่างเช่นหากภาษาของคุณรองรับเฉพาะจำนวนเต็ม 32 บิตคุณอาจอธิบายได้ว่า
Magic Octopus Urn

คำตอบ:


12

Brachylog , 12 11 ไบต์

:2rj:Acb#p=

ลองออนไลน์!

สิ่งนี้แปลเป็น Brachylog โดยตรงอย่างแปลกใจ นี่คือฟังก์ชั่นไม่ใช่โปรแกรมเต็มรูปแบบ (แม้ว่าการให้ล่ามZเป็นอาร์กิวเมนต์บรรทัดคำสั่งทำให้มันเพิ่ม wrapper ที่เหมาะสมเพื่อทำให้ฟังก์ชั่นเป็นโปรแกรมนั่นคือสิ่งที่ฉันทำเพื่อให้การเชื่อมโยง TIO ทำงาน) นอกจากนี้ยังค่อนข้างโชคร้ายที่jดูเหมือนว่าจะได้รับการจัดทำดัชนี -1 และต้องการการแก้ไขเพื่ออนุญาต

คุณสามารถสร้างเหตุผลที่สมเหตุสมผลว่า=ไม่จำเป็น แต่ฉันคิดว่าวิธีแก้ปัญหาก็คือ โดยไม่ต้องฟังก์ชั่นของการอธิบายชุดของจำนวนเฉพาะทั้งหมดที่เริ่มต้นด้วยจำนวนที่กำหนด2และไม่มีคำสั่งที่ชัดเจนว่าโปรแกรมควรทำอะไรกับคำอธิบายนี้ (ในกรณีนี้การสร้างค่าแรก) มันอาจจะไม่ สอดคล้องกับข้อกำหนด

คำอธิบาย

:2rjbAcb#p=
:2rj         2 repeated a number of times equal to the input plus one
    :Ac      with something appended to it
       b     minus the first element
        #p   is prime;
          =  figure out what the resulting values are and return them

เมื่อใช้เป็นฟังก์ชั่นคืนค่าจำนวนเต็มไม่มีสิ่งใดที่ร้องขอค่าผ่านไปก่อนดังนั้นสิ่งแรกคือสิ่งที่เราต้องกังวล

หนึ่งความละเอียดอ่อน (ชี้ให้เห็นในความคิดเห็น): :Acbและb:Acมีความเท่าเทียมกันทางคณิตศาสตร์ (เมื่อมีการลบออกจากจุดเริ่มต้นและอื่น ๆ จะเพิ่มไปยังจุดสิ้นสุดด้วยพื้นที่ในระหว่างไม่เคยทับซ้อนกัน); ก่อนหน้านี้ฉันเคยมีb:Acซึ่งเป็นธรรมชาติมากกว่า แต่มันหยุดที่อินพุต 0 (ซึ่งฉันคาดเดาว่าเป็นเพราะcปฏิเสธที่จะต่อเรียงรายการว่างเปล่ากับอะไรก็ได้ Brachylog builtins จำนวนมากมักจะทำลายรายการว่างด้วยเหตุผลบางอย่าง) :Acbทำให้แน่ใจว่าcไม่ต้องเห็นรายการว่างหมายความว่ากรณีของอินพุต 0 สามารถทำงานได้เช่นกัน


@muddyfish: ใช่ อย่างไรก็ตามมันไม่ได้ผลเพราะ0ไม่มีเหตุผลที่ชัดเจน (Brachylog ดูเหมือนจะแพ้เลขศูนย์ด้วยเหตุผลบางอย่างฉันสงสัยว่าcมันเป็นผู้รับผิดชอบ) ที่กล่าวว่ามันง่ายพอที่จะแก้ไขได้ดังนั้นฉันจะแก้ไขทันที

b:Acไม่ทำงานเพราะ0คุณได้รับข้อมูล2b:Ac: 2bให้0และคุณไม่สามารถใช้cกับศูนย์นำหน้าได้ เหตุผลนี้เพื่อหลีกเลี่ยงการวนซ้ำไม่สิ้นสุดในกรณีทั่วไปที่คุณสามารถเพิ่มศูนย์เป็นศูนย์และมีผลลัพธ์เหมือนกัน
เสียชีวิต

นอกจากนี้คุณสามารถย่อให้สั้นลงหนึ่งไบต์ด้วยการเขียน:2rjแทน,2:?j
Fatalize

ฉันลืมไปrแล้ว นั่นเป็นเพียงการปรับปรุงธรรมดา ฉันเข้าใจว่าเกิดอะไรขึ้นกับcคุณ (คุณไม่ต้องการผลลัพธ์จำนวนมากเมื่อวิ่งถอยหลัง) อย่างไรก็ตามการปรับปรุงที่น่าจะเกิดขึ้นคือการไม่อนุญาตให้มีการลดทอนข้อมูลอินพุตเฉพาะในกรณีที่พวกเขาไม่ได้ถูกผูกมัดในขณะที่อนุญาตให้พวกเขาเมื่ออินพุตถูกผูกไว้กับค่าความเสื่อมแล้ว

เป็นไปได้อย่างแน่นอนและฉันจะเพิ่มไว้ในตัวติดตาม Github แม้ว่าการนำconcatenate มาใช้จะมีความยาวเกือบ 100 บรรทัดซึ่งเป็นจำนวนมากสำหรับภาคแสดงบท Prolog
ทำให้เสียชีวิต

15

Java (OpenJDK 8) , 164 110 ไบต์

a->{int i=0;for(;!(i+"").matches("2{"+a+"}.*")|new String(new char[i]).matches(".?|(..+)\\1+");i++);return i;}

ขอบคุณ @FryAmTheEggman สำหรับจำนวนไบต์!

ลองออนไลน์!


2
คุณช่วยอธิบายว่าการตรวจสอบ regex ทำงานอย่างไร?
J. Antonio Perez

ฉันไม่รู้. ไม่ใช่ของฉันและฉันไม่รู้ว่าใครเป็นผู้สร้างเดิม ฉันเพิ่งจะใช้ความยาวของ n และการจับคู่ถ้า n ไม่สำคัญ
Pavel

คุณรู้หรือไม่ว่าแหล่งต้นฉบับคืออะไร? คุณเรียนรู้เกี่ยวกับมันที่ไหน คุณทดสอบโค้ดแล้วหรือยัง
J. Antonio Perez

3
@Pavel การตรวจสอบแบบดั้งเดิม regex ทำให้คำตอบนี้น่าทึ่งแม้ว่าคุณจะไม่ได้ทำก็ตาม คุณควรเพิ่มเข้าไปในเธรด "Tips for Golfing in Java"
Magic Octopus Urn

3
ฉันไม่สามารถทดสอบรหัสได้ในตอนนี้ แต่ฉันค่อนข้างแน่ใจว่า regex ทำงานเช่นนี้new String(new char[i]))ทำให้สตริงที่มีความยาวไม่เท่ากับจำนวน จากนั้น regex จะจับคู่หมายเลขคอมโพสิตโดยตรวจสอบว่าการทำซ้ำชุดตัวเลขตรงกับสตริงทั้งหมดหรือไม่ ถ้าฉันถูกต้องนั่นหมายความว่าคุณควรจะเล่นกอล์ฟในส่วนที่สองเพื่อไม่ให้มี?ฉันจะแจ้งให้คุณทราบแน่นอนเมื่อฉันได้รับคอมพิวเตอร์
FryAmTheEggman

5

Pyth, 12 ไบต์

f&!x`T*Q\2P_

ใน pseudocode:

f                key_of_first_truthy_value( lambda T:
  !                  not (
   x`T*Q\2               repr(T).index(input()*'2')
                     )
 &                   and
          P_T        is_prime(T)
                 )

ลูปlambdaเริ่มต้นจากการT=1เพิ่มขึ้น 1 จนกว่าเงื่อนไขจะเป็นที่พอใจ สตริงของ2s 0จะต้องเป็นสตริงย่อยจากจุดเริ่มต้นของสตริงคือความต้องการวิธีการที่ดัชนีจะกลับมา หากไม่พบสตริงย่อยมันจะส่งคืน-1ซึ่งสะดวกเช่นกันดังนั้นจึงไม่มีกรณีพิเศษ

คุณสามารถลองออนไลน์ได้ที่นี่แต่เซิร์ฟเวอร์อนุญาตให้ป้อนข้อมูลได้สูงสุด4เท่านั้น


4

Perl, 50 ไบต์

49 ไบต์ของรหัส + -pธง

++$\=~/^2{$_}/&&(1x$\)!~/^1?$|^(11+)\1+$/||redo}{

จัดหาอินพุตโดยไม่ขึ้นบรรทัดใหม่ ตัวอย่างเช่น

echo -n 4 | perl -pE '++$\=~/^2{$_}/&&(1x$\)!~/^1?$|^(11+)\1+$/||redo}{'

การดำเนินการนี้ใช้เวลาสักครู่ในการรันตัวเลขที่มากกว่า 4 ขณะที่ทดสอบทุกหมายเลข (มี 2 การทดสอบ: อันแรก/^2{$_}/จะตรวจสอบว่ามีเพียงพอ 2 ในตอนเริ่มต้นหรือไม่และการ(1x$\)!~/^1?$|^(11+)\1+$/ทดสอบครั้งที่สองครั้งแรกสำหรับผู้เริ่มต้น


3

Haskell, 73 ไบต์

f n=[x|x<-[2..],all((>0).mod x)[3..x-1],take n(show x)==([1..n]>>"2")]!!0

ตัวอย่างการใช้งาน: ->f 32221

กำลังดุร้าย. [1..n]>>"2"สร้างรายการของn 2s ซึ่งถูกเปรียบเทียบกับnตัวอักษรแรกในการแสดงสตริงของไพรม์ปัจจุบัน


3

Mathematica, 103 ไบต์

ReplaceRepeated[0,i_/;!IntegerDigits@i~MatchQ~{2~Repeated~{#},___}||!PrimeQ@i:>i+1,MaxIterations->∞]&

ฟังก์ชั่นที่ไม่มีชื่อการโต้แย้งอาร์กิวเมนต์จำนวนเต็ม#และลบจำนวนเต็ม มันจะทดสอบจำนวนเต็มบวกทั้งหมดตามลำดับจนกระทั่งพบว่าทั้งคู่เริ่มต้นด้วย# 2 วินาทีและเป็นจำนวนเฉพาะ ช้าลงอย่างมากสำหรับอินพุตที่สูงกว่า 5

ผลลัพธ์ก่อนหน้า: Mathematica, 155 ไบต์

Mathematica น่าจะดีกว่าสำหรับการเล่นกอล์ฟถ้ามันไม่ได้พิมพ์ลงไปอย่างแรง เราต้องสลับไปมาระหว่างชนิดจำนวนเต็ม / list / string อย่างชัดเจน

(d=FromDigits)[2&~Array~#~Join~{1}//.{j___,k_}/;!PrimeQ@d@{j,k}:>({j,k+1}//.{a__,b_,10,c___}->{a,b+1,0,c}/.{a:Repeated[2,#-1],3,b:0..}->{a,2,0,b})]/. 23->2&

ขั้นตอนวิธีการนี้ดำเนินการในรายชื่อของตัวเลข{2,...,2,1}แปลกที่เริ่มต้นด้วย ตราบใดที่ตัวเลขเหล่านั้นไม่ใช่ตัวเลขของจำนวนเฉพาะมันจะเพิ่มหนึ่งหลักสุดท้ายโดยใช้กฎ{j___,k_}/;!PrimeQ@d@{j,k}:>({j,k+1}... และจากนั้นจะดำเนินการด้วยตนเองที่จะนำตัวเลขหนึ่งหลักไปยังตัวเลขถัดไปตราบใดที่ ตัวเลขเท่ากับ 10 โดยใช้กฎ{a__,b_,10,c___}->{a,b+1,0,c}... แล้วถ้าเราได้ไปไกลว่าสุดท้ายของชั้นนำ2s ได้กลายเป็นเริ่มต้นไปกับหลักอื่นในท้ายที่สุดโดยใช้กฎ3 ที่สิ้นสุดเพียงแค่แก้ไขกรณีพิเศษที่ใส่เป็น: ช่วงเวลาส่วนใหญ่ไม่สามารถจบในแต่สามารถ (มีข้อผิดพลาดเล็กน้อยเกิดขึ้นในอินพุตและแต่ฟังก์ชันพบวิธีการในการตอบถูก){a,b+1,0,c}/.{a:Repeated[2,#-1],3,b:0..}->{a,2,0,b}/. 23->212201

ขั้นตอนวิธีการนี้ค่อนข้างรวดเร็ว: ยกตัวอย่างเช่นแล็ปท็อปของฉันก็จะใช้เวลาน้อยกว่า 3 วินาทีเพื่อคำนวณว่าเริ่มต้นที่สำคัญเป็นครั้งแรกที่มี 1,000 คือ222...220521


2

Pyth, 17 ไบต์

f&q\2{<`T|Q1}TPTh

ดูเหมือนจะไม่สามารถแก้ไขได้ n = 4ออนไลน์ได้ แต่มันถูกต้องในทางทฤษฎี

คำอธิบาย

               Th    Starting from (input)+1, 
f                    find the first T so that
      <              the first
          Q          (input) characters
         | 1         or 1 character, if (input) == 0
       `T            of T's string representation
     {               with duplicates removed
  q\2                equal "2", 
 &                   and
            }T       T is found in
              PT     the list of T's prime factors.

2

Perl 6 , 53 ไบต์

{($/=2 x$^n-1)~first {+($/~$_) .is-prime&&/^2/},0..*}

ลองมัน

ขยาย:

{
  ( $/ = 2 x $^n-1 )       # add n-1 '2's to the front (cache in 「$/」)
  ~
  first {
    +( $/ ~ $_ ) .is-prime # find the first that when combined with 「$/」 is prime
    &&
    /^2/                   # that starts with a 2 (the rest are in 「$/」)
  },
  0..*
}


2

Pyke ขนาด 14 ไบต์

.fj`Q\2*.^j_P&

ลองที่นี่!

.fj            - first number (asj)
   `    .^     -   str(i).startswith(V)
    Q\2*       -    input*"2"
             & -  ^ & V
          j_P  -   is_prime(j)

12 ไบต์หลังจากแก้ไขข้อผิดพลาดและคุณสมบัติใหม่

~p#`Q\2*.^)h

ลองที่นี่!

~p           - all the primes
  #       )h - get the first where...
   `    .^   - str(i).startswith(V)
    Q\2*     -  input*"2"

2

Sage, 69 68 ไบต์

lambda n:(x for x in Primes()if '2'*len(`x`)=>'2'*n==`x`[:n]).next()

ใช้เครื่องกำเนิดไฟฟ้าเพื่อค้นหาคำแรก ๆ


2

Japt, 20 ไบต์

L²o@'2pU +Xs s1)nÃæj

ทดสอบออนไลน์! มันเสร็จสิ้นภายในสองวินาทีบนเครื่องของฉันสำหรับอินพุตทั้งหมดถึง 14 และหลังจากนั้นจะสูญเสียความแม่นยำตามธรรมชาติ (JavaScript มีความแม่นยำเป็นจำนวนเต็มสูงสุดถึง 2 53 )

ขอบคุณ @obarakon สำหรับการทำงานกับ :-)

คำอธิบาย

                       // Implicit: U = input integer, L = 100
L²o                    // Generate the range [0...100²).
   @             Ã     // Map each item X through the following function:
    '2pU               //   Take a string of U "2"s.
         +Xs s1)n      //   Append all but the first digit of X, and cast to a number.
                       // If U = 3, we now have the list [222, 222, ..., 2220, 2221, ..., 222999].
                  æ    // Take the first item that returns a truthy value when:
                   j   //   it is checked for primality.
                       // This returns the first prime in the forementioned list.
                       // Implicit: output result of last expression

ใน Japt เวอร์ชันล่าสุดสามารถมีขนาด 12 ไบต์:

_n j}b!+'2pU   // Implicit: U = input integer
_   }b         // Return the first non-negative bijective base-10 integer that returns
               // a truthy value when run through this function, but first,
      !+       //   prepend to each integer
        '2pU   //   a string of U '2's.
               // Now back to the filter function:
 n j           //   Cast to a number and check for primality.
               // Implicit: output result of last expression

ทดสอบออนไลน์! มันเสร็จภายในครึ่งวินาทีบนเครื่องของฉันสำหรับอินพุตทั้งหมดถึง 14


สุดยอดทางออก!
โอลิเวอร์

นี้ล้มเหลวในการป้อนข้อมูลที่ 5 เนื่องจากคุณไม่เคยทดสอบ2222203เท่านั้นและหลังจากนั้นไม่นาน222223 2222210นอกจากนี้ยังล้มเหลวในอินพุตใด ๆ ที่ต้องการตัวเลขเพิ่มเติมสามหลักขึ้นไปหลังจากสตริง2s เช่นอินพุท 15
Greg Martin

@GregMartin Darn คุณพูดถูก แก้ไขที่ราคา 5 ไบต์
ETHproductions

วิธีนี้จะช่วยแก้ไขกรณีทดสอบ แต่อัลกอริทึมยังคงสันนิษฐานว่าจะไม่มีการเพิ่มตัวเลขมากกว่าสามหลักเพื่อค้นหานายกซึ่งอาจเป็นเท็จสำหรับอินพุตที่ใหญ่กว่า
Greg Martin

@GregMartin สิ่งนี้ใช้ได้กับกรณีทดสอบทั้งหมดถึง 14 และ JS ทำงานเป็นปัญหาความแม่นยำจำนวนเต็มในกรณีที่ 15 ฉันไม่คิดว่าอัลกอริทึมต้องถูกต้องตามหลักวิชาในอดีตที่ผ่านมา 2 ^ 53 แต่บางทีฉันผิด ...
ETHproductions

2

PHP, 76 ไบต์

for($h=str_pad(2,$i=$argv[1],2);$i>1;)for($i=$p=$h.++$n;$p%--$i;);echo$p?:2;

รับอินพุตจากอาร์กิวเมนต์บรรทัดคำสั่ง -rทำงานด้วย

ทำให้พังถล่ม

for($h=str_pad(2,$i=$argv[1],2) # init $h to required head
    ;$i>1;                      # start loop if $p>2; continue while $p is not prime
)
    for($i=$p=$h.++$n               # 1. $p = next number starting with $h
                                    #    (first iteration: $p is even and >2 => no prime)
    ;$p%--$i;);                     # 2. loop until $i<$p and $p%$i==0 ($i=1 for primes)
echo$p?:2;                      # print result; `2` if $p is unset (= loop not started)

1

Bash (+ coreutils), 53 ไบต์

ทำงานได้ถึง 2 ^ 63-1 (9223372036854775807)ใช้เวลาพอสมควรสำหรับการจบ N> 8

แข็งแรงเล่นกอล์ฟ

seq $[2**63-1]|factor|grep -Pom1 "^2{$1}.*(?=: \S*$)"

ทดสอบ

>seq 0 7|xargs -L1 ./twist

2
2
223
2221
22229
2222203
22222223
22222223

1

Python 3, 406 ไบต์

w=2,3,5,7,11,13,17,19,23,29,31,37,41
def p(n):
 for q in w:
  if n%q<1:return n==q
  if q*q>n:return 1
 m=n-1;s,d=-1,m
 while d%2==0:s,d=s+1,d//2
 for a in w:
  x=pow(a,d,n)
  if x in(1,m):continue
  for _ in range(s):
   x=x*x%n
   if x==1:return 0
   if x==m:break
  else:return 0
 return 1
def f(i):
 if i<2:return 2
 k=1
 while k:
  k*=10;l=int('2'*i)*k
  for n in range(l+1,l+k,2):
   if p(n):return n

รหัสทดสอบ

for i in range(31):
    print('{:2} = {}'.format(i, f(i)))

ผลการทดสอบ

 0 = 2
 1 = 2
 2 = 223
 3 = 2221
 4 = 22229
 5 = 2222203
 6 = 22222223
 7 = 22222223
 8 = 222222227
 9 = 22222222223
10 = 22222222223
11 = 2222222222243
12 = 22222222222201
13 = 22222222222229
14 = 222222222222227
15 = 222222222222222043
16 = 222222222222222221
17 = 222222222222222221
18 = 22222222222222222253
19 = 222222222222222222277
20 = 2222222222222222222239
21 = 22222222222222222222201
22 = 222222222222222222222283
23 = 2222222222222222222222237
24 = 22222222222222222222222219
25 = 222222222222222222222222239
26 = 2222222222222222222222222209
27 = 2222222222222222222222222227
28 = 222222222222222222222222222269
29 = 2222222222222222222222222222201
30 = 222222222222222222222222222222053

ฉันตัดสินใจที่จะใช้ความเร็วในช่วงที่ค่อนข้างใหญ่แทนที่จะเป็นขนาดไบต์ :) ฉันใช้การทดสอบแบบดั้งเดิมของ Miller-Rabin ที่กำหนดแน่นอนซึ่งรับประกันได้ถึง 3317044064679887385961981 กับพยานชุดนี้ ช่วงเวลาที่มีขนาดใหญ่มักจะประสบความสำเร็จผ่านการทดสอบ แต่คอมโพสิตบางคนก็อาจจะผ่านแม้ว่าน่าจะเป็นมากต่ำ อย่างไรก็ตามฉันยังทดสอบหมายเลขเอาต์พุตสำหรับ i> 22 โดยใช้pyecmโปรแกรมตัวประกอบการ Elliptic Curve และพวกมันดูเหมือนจะเป็นไพรม์


1
ก่อนปิด: การส่งต้องมีความน่าจะเป็น 1 โอกาสในการแก้ไขที่ถูกต้อง ประการที่สองนี่คือ codegolf ดังนั้นคุณต้องไปหาขนาดไบท์ นอกจากนั้นดี
เลมอนที่ถูกทำลายได้

1
@ ทำลายได้ขอบคุณแตงโม! จุดประสงค์เกี่ยวกับการไปสำหรับขนาดไบต์ ฉันเดาว่าฉันสามารถp()โทรเข้าแบบอินไลน์... OTOH มันยากที่จะเขียนโปรแกรมที่มีขนาดเล็กลงอย่างมากซึ่งสามารถให้ผลลัพธ์ที่ถูกต้องสำหรับ i> 20 ภายในไม่กี่วินาที (นั่นไม่ใช่ "การโกง" ตัวตรวจสอบเบื้องต้น (. :)
PM 2Ring

หลายโปรแกรมไม่สามารถจัดการกับตัวเลข 33 หลัก (n: = 30) เนื่องจากมาตรฐานทองคำของ OP สูงถึง 18 หลักเท่านั้นและไม่มีการกำหนดไว้เป็นอย่างอื่นโดยเขา / เธอมีเหตุผลที่จะสมมติว่า n: = 30 นั้นดีพอสำหรับ IMO
user3819867

@ PM2Ring ไม่จำเป็นต้องอยู่ใน "ภายใต้วินาที" ทำให้รหัสสั้นที่สุดเท่าที่จะทำได้และไม่สนใจความเร็วเลย นั่นคือจิตวิญญาณของ [code-golf] ฉันจะเปลี่ยน downvote เป็น upvote ทันทีที่มันเล่นกอล์ฟ
mbomb007

จริง ๆ แล้วถ้ามันสร้างผลลัพธ์ที่ถูกต้องจนถึงขีด จำกัด คำตอบนั้นจะทำงานกับความน่าจะเป็นที่หนึ่ง
เลมอนที่ทำลายได้

1

Python 3, 132 ไบต์

def f(x):
 k=10;p=2*(k**x//9)
 while x>1:
  for n in range(p*k,p*k+k):
   if all(n%q for q in range(2,n)):return n
  k*=10
 return 2

ความหวังในการแสดงใด ๆ ได้รับการเสียสละนับจำนวนน้อย


-1

Java, 163 ไบต์

BigInteger f(int a){for(int x=1;x>0;x+=2){BigInteger b=new BigInteger(new String(new char[a]).replace("\0","2")+x);if(b.isProbablePrime(99))return b;}return null;}

รหัสทดสอบ

    public static void main(String[] args) {
    for(int i = 2; i < 65; i++)
        System.out.println(i + " " + new Test20170105().f(i));
    }

เอาท์พุท:

2 223
3 2221
4 22229
5 2222219
6 22222223
7 22222223
8 222222227
9 22222222223
10 22222222223
11 2222222222243
12 22222222222229
13 22222222222229
14 222222222222227
15 222222222222222143
16 222222222222222221
17 222222222222222221
18 22222222222222222253
19 222222222222222222277
20 2222222222222222222239
21 22222222222222222222261
22 222222222222222222222283
23 2222222222222222222222237
24 22222222222222222222222219
25 222222222222222222222222239
26 2222222222222222222222222213
27 2222222222222222222222222227
28 222222222222222222222222222269
29 22222222222222222222222222222133
30 222222222222222222222222222222113
31 222222222222222222222222222222257
32 2222222222222222222222222222222243
33 22222222222222222222222222222222261
34 222222222222222222222222222222222223
35 222222222222222222222222222222222223
36 22222222222222222222222222222222222273
37 222222222222222222222222222222222222241
38 2222222222222222222222222222222222222287
39 22222222222222222222222222222222222222271
40 2222222222222222222222222222222222222222357
41 22222222222222222222222222222222222222222339
42 222222222222222222222222222222222222222222109
43 222222222222222222222222222222222222222222281
44 2222222222222222222222222222222222222222222297
45 22222222222222222222222222222222222222222222273
46 222222222222222222222222222222222222222222222253
47 2222222222222222222222222222222222222222222222219
48 22222222222222222222222222222222222222222222222219
49 2222222222222222222222222222222222222222222222222113
50 2222222222222222222222222222222222222222222222222279
51 22222222222222222222222222222222222222222222222222289
52 2222222222222222222222222222222222222222222222222222449
53 22222222222222222222222222222222222222222222222222222169
54 222222222222222222222222222222222222222222222222222222251
55 222222222222222222222222222222222222222222222222222222251
56 2222222222222222222222222222222222222222222222222222222213
57 222222222222222222222222222222222222222222222222222222222449
58 2222222222222222222222222222222222222222222222222222222222137
59 22222222222222222222222222222222222222222222222222222222222373
60 222222222222222222222222222222222222222222222222222222222222563
61 2222222222222222222222222222222222222222222222222222222222222129
62 2222222222222222222222222222222222222222222222222222222222222227
63 2222222222222222222222222222222222222222222222222222222222222227
64 2222222222222222222222222222222222222222222222222222222222222222203

582.5858 มิลลิวินาที

คำอธิบาย: วนซ้ำจำนวนเต็มและเพิ่มเป็นสตริงในสตริงรูทซึ่งเป็นสตริง "2" ที่กำหนดและตรวจสอบว่าเป็นไพร์มหรือไม่


3
isProbablePrimeมีผลบวกปลอมเป็นครั้งคราว นั่นจะทำให้คำตอบเป็นโมฆะเนื่องจากมีสถานการณ์ที่จะส่งกลับค่าที่ไม่ถูกต้อง

ความน่าจะเป็นของความผิดพลาดน้อยกว่า 2 ^ -99 (ดูเอกสารประกอบ )
SamCle88

@ SamCle88 ความน่าจะเป็นที่น้อยหรือไม่นี่เป็นความผิดพลาดทางด้านเทคนิค isProbablePrime ไม่สามารถยอมรับได้สำหรับการตรวจสอบที่สำคัญและถูกปฏิเสธในความท้าทายอื่น ๆ
Magic Octopus Urn
โดยการใช้ไซต์ของเรา หมายความว่าคุณได้อ่านและทำความเข้าใจนโยบายคุกกี้และนโยบายความเป็นส่วนตัวของเราแล้ว
Licensed under cc by-sa 3.0 with attribution required.