ตัวเลขสามารถกลายเป็นนายกได้หรือไม่?


24

ลำดับ

2ทุกคนรู้เพียงตัวเลขแม้กระทั่งที่สำคัญคือ โฮครวญเพลง แต่มีบางเลขคู่nที่เมื่อนำมาต่อกันn-1จะกลายเป็นหมายเลขเฉพาะ

สำหรับผู้เริ่ม1ไม่อยู่ในรายการเพราะ10ไม่ใช่เฉพาะ ในทำนองเดียวกันกับ2( 21) และ3( 32) แต่4ทำงานเพราะเป็นสำคัญดังนั้นจึงเป็นหมายเลขแรกในลำดับ43 a(1) = 4จำนวนต่อไปที่ผลงาน (ค่า6( 65) หรือ8( 87) ทำงาน) เป็น10เพราะเป็นสำคัญดังนั้น109 a(2) = 10จากนั้นเราก็ข้ามพวงอีกจนกว่าจะ22เพราะเป็นสำคัญดังนั้น2221 a(3) = 22และอื่น ๆ

เห็นได้ชัดว่าคำศัพท์ทั้งหมดในลำดับนี้เป็นเลขคู่เพราะเลขคี่ใด ๆ ที่nต่อกันn-1กลายเป็นคู่ (เช่น3กลายเป็น32) ซึ่งจะไม่เป็นเอก

นี่คือลำดับA054211บน OEIS

ความท้าทาย

กำหนดหมายเลขอินพุตnที่เหมาะกับบางตำแหน่งในลำดับนี้ (เช่นnตัดแบ่งกับn-1ไพร์มไทม์) ให้เอาท์พุทตำแหน่งในลำดับนี้ คุณสามารถเลือกดัชนี 0- หรือ 1 ก็ได้ แต่โปรดระบุสิ่งที่คุณส่ง

กฎระเบียบ

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

ตัวอย่าง

ตัวอย่างด้านล่างมีการจัดทำดัชนี 1 รายการ

n = 4
1

n = 100
11

n = 420
51

1
ทำไมคุณต้องทำในสิ่งที่ตรงกันข้าม? cQuents ไม่มีโหมดนั้น :(
Stephen

4
@ StepHen เพียงเพื่อการเปลี่ยนแปลงของจังหวะ; สิ่งที่แตกต่างจากปกติ
AdmBorkBork

9
ฉันรู้สึกว่ามันจะดีกว่ามากในฐานะปัญหาการตัดสินใจ
ข้าวสาลีตัวช่วยสร้าง

4
ไม่เพียง แต่เป็น 2 จำนวนหารเท่านั้นที่สำคัญ 2, 3 ยังเป็นหารจำนวนเฉพาะที่สำคัญ 3, 5 และเป็นเพียงหารจำนวนเฉพาะโดย 5. โดยทั่วไปจำนวนเฉพาะอยู่เสมอจำนวนหารเท่านั้นที่สำคัญโดยn nมันไม่ได้พิเศษ - นั่นเป็นวิธีที่ตัวเลขทำงานเฉพาะ
แยกผลไม้

คำตอบ:


11

เยลลี่ ,  8  7 ไบต์

ḊżṖVÆPS

ลิงก์ monadic ที่นำสมาชิกลำดับและส่งคืนดัชนีในลำดับ

ลองออนไลน์!

อย่างไร?

ḊżṖVÆPS - Link: number, n
Ḋ       - dequeue (implicit range) = [ 2   , 3   , 4   ,... ,              n         ]
  Ṗ     - pop (implicit range)     = [   1 ,   2 ,   3 ,... ,                  n-1   ]
 ż      - zip                      = [[2,1],[3,2],[4,3],... ,             [n , n-1]  ]
   V    - evaluate as Jelly code   = [ 21  , 32  , 43  ,... ,         int("n"+"n-1") ]
    ÆP  - is prime? (vectorises)   = [  0  ,  0  ,  1  ,... , isPrime(int("n"+"n-1"))]
      S - sum

TIO ไม่ลงสำหรับฉันบางทีมันอาจจะเพิ่งกลับมา?
Conor O'Brien

1
แก้ไขเมื่อ 2 นาทีที่แล้ว :)
Jonathan Allan

สวย! ว่าzip(head(), pop())เคล็ดลับคือเย็นจริงๆ :)
DJMcMayhem

การเข้ารหัสคืออะไรที่ 7 ไบต์?
kylefinn

1
@kylefinn Jelly มีโค้ดเพจของตัวเองคลิกที่ลิงค์ไบต์ในส่วนหัวเพื่อดู
Jonathan Allan

8

Haskell , 80 75 70 ไบต์

5 ไบต์บันทึกขอบคุณ Laikoni

p x=all((>0).mod x)[2..x-1]
g n=sum[1|x<-[4..n],p$read$show=<<[x,x-1]]

ลองออนไลน์!


1
ฉันคิดว่าคุณสามารถใช้การทดสอบที่สำคัญสั้นกว่าp x=all((>0).mod x)[2..x-1]ซึ่งล้มเหลวสำหรับ 1 แต่สิ่งนี้ไม่ควรเกิดขึ้นในกรณีนี้
Laikoni

1
นอกจากนี้ยังสามารถลงไปshow x++show(x-1) show=<<[x,x-1]
Laikoni

@Laikoni ขอบคุณสำหรับเคล็ดลับ! ฉันคิดว่าshowสามารถทำได้ในวิธีที่สั้นกว่า แต่ฉันไม่คิดว่าแผนที่ concat ด้วยเหตุผลบางอย่าง
ข้าวสาลีตัวช่วยสร้าง

6

เยลลี่ , 12, 10 , 8 ไบต์

;’VÆPµ€S

ลองออนไลน์!

บันทึก 1-2 ไบต์ขอบคุณ @ nmjmcman101 และบันทึก 2 ไบต์ขอบคุณ @Dennis!

คำอธิบาย:

     µ€   # For N in range(input()):
;         #   Concatenate N with...
 ’        #   N-1
  V       #   And convert that back into an integer
   ÆP     #   Is this number prime?
       S  # Sum that list 

คุณสามารถปล่อย R และใช้ช่วงโดยนัยได้หรือไม่
nmjcman101

@ nmjcman101 ฉันไม่รู้ว่าเป็นสิ่งที่ ขอบคุณ!
DJMcMayhem

5

05AB1E , 9 8 7 ไบต์

รหัส

ƒNN<«pO

ใช้การเข้ารหัส05AB1E ลองออนไลน์!

คำอธิบาย

ƒ          # For N in [0 .. input]..
 NN<«      #   Push n and n-1 concatenated
     p     #   Check for primality
      O    #   Sum the entire stack (which is the number of successes)

แน่นอนว่านี่ใช้ประโยชน์จากความจริงที่ว่า 05AB1E ละเว้นข้อผิดพลาด ... เพราะฉันไม่คิดว่าคุณจะสามารถตรวจสอบได้ว่า'0-1'มีความสำคัญหรือไม่
Erik the Outgolfer

5

Husk , 13 11 10 ไบต์

1- แก้ปัญหาสารเคมี:

#ȯṗdS¤+d←ḣ

ลองออนไลน์!

Ungolfed / คำอธิบาย

         ḣ -- in the range [1..N]
#          -- count the number where the following predicate is true
        ←  --   decrement number,
    S  d   --   create lists of digits of number and decremented 
     ¤+    --   concatenate,
   d       --   interpret it as number and
 ȯṗ        --   check if it's a prime number

ขอบคุณ @Zgarb สำหรับ-3ไบต์!


1
£İpเทียบเท่ากับ นอกจากนี้คุณยังสามารถบันทึกไบต์ที่มีแทน#…ḣ £f…N
Zgarb

4

Python 2 , 87 ไบต์

-2 ไบต์ขอบคุณที่ @officialaimm 1 การจัดทำดัชนี

lambda n:sum(all(z%v for v in range(2,z))for i in range(4,n+1)for z in[int(`i`+`i-1`)])

ชุดทดสอบ


ฉันกำลังเล่นกอล์ฟนี้โดยเร็วที่สุด ข้อเสนอแนะยินดีต้อนรับ
Mr. Xcoder


4

Pyth , 12 ไบต์

smP_s+`d`tdS

ลองออนไลน์! หรือตรวจสอบกรณีทดสอบทั้งหมด


อย่างไร?

smP_s+`d`tdSQ  -> Full Program. Takes input from Standard Input. Q means evaluated input
                  and is implicit at the end.

 m         SQ  -> Map over the Inclusive Range: [1...Q], with the current value d.
    s+`d`td    -> Concatenate: d, the current item and: td, the current item decremented. 
                  Convert to int.
  P_           -> Prime?
s              -> Sum, counts the occurrences of True.

4

Japt , 15 14 12 11 9 8 ไบต์

1 การจัดทำดัชนี

ÇsiZÄÃèj

ลองมัน

Ç            :Map each Z in the range [0,input)
 s           :  Convert to string
  i          :    Prepend
   ZÄ        :    Z+1
     Ã       :End map
      è      :Count
       j     :  Primes


Gah! ทำไมฉันถึงมีจุดบอดดังกล่าวÆและÇ! ขอบคุณ @Oliver; ฉันจะอัปเดตเมื่อฉันกลับไปที่คอมพิวเตอร์
ขนดก

2o+X(ที่มีพื้นที่ต่อท้าย) จะทำงานแทน[XXÉ]แม้ว่าถ้าฉันได้รับรอบไปที่[]วงเล็บสมดุลอัตโนมัติวิธีแก้ปัญหาของคุณจะสั้นกว่าไบต์ (ที่จริงแล้ว 2 เนื่องจากคุณสามารถทำได้õ_ZÉ]¬nÃèj)
ETHproductions

@ ETHproductions: ทุกวันนี้สิ่งที่ฉันทำเมื่อทำงานกับอาร์เรย์คือการตรวจสอบเพื่อดูว่ามีการเพิ่มการทรงตัวอัตโนมัติหรือไม่[]! : D
Shaggy

ด้วยเหตุผลบางอย่างฉันคิดว่าอัฒภาคหยุดทำงานเช่นกันดังนั้นฉันจะพยายามแก้ไข อย่าคิดว่าฉันจะมีโอกาสจนกระทั่งพรุ่งนี้บ่ายแม้ว่า
ETHproductions

3

Röda , 73 ไบต์

{seq 3,_|slide 2|parseInteger`$_2$_1`|{|i|[1]if seq 2,i-1|[i%_!=0]}_|sum}

ลองออนไลน์!

1 การจัดทำดัชนี มันใช้กระแสเพื่อทำอินพุทและเอาท์พุท

คำอธิบาย:

{
seq 3,_| /* Create a stream of numbers from 3 to input */
slide 2| /* Duplicate every number except the first and the last
            to create (n-1,n) pairs */
parseInteger`$_2$_1`| /* Concatenate n and n-1 and convert to integer */
{|i| /* For every i in the stream: */
    [1]if seq 2,i-1|[i%_!=0] /* Push 1 if i is a prime
                                (not divisible by smaller numbers) */
}_|
sum /* Return the sum of numbers in the stream */
}

2

Pyth , 14 ไบต์

lfP_Tms+`d`tdS

ลองออนไลน์!

คำอธิบาย

              Q    # Implicit input
             S     # 1-indexed range
     m             # For d in range [1, Q]...
      s+`d`td      # Concatenate d and d - 1
 fP_T              # Filter on primes
l                  # Return the length of the list

คุณเอาชนะฉันในไม่กี่วินาทีฉันจะตีคุณทีละไม่กี่ไบต์: P
Mr. Xcoder

@ Mr.Xcoder เวอร์ชันแรกของฉันคือlfTmP_s+`d`tdSมันโชคร้ายที่ฉันไม่ได้พบกลอุบายของคุณด้วยตัวเองในเวลานั้น :)
จิม

2

Perl 6 , 45 ไบต์

{first :k,$_,grep {is-prime $_~.pred},1..∞}

ลองออนไลน์!

การgrepสร้างลำดับของตัวเลขที่มีคุณสมบัติตามนั้นเราจะมองหาคีย์ ( :k) (เช่นดัชนี) ของfirst$_จำนวนในรายการที่เท่ากับพารามิเตอร์การป้อนข้อมูล



2

C, 99 94 ไบต์

1 การจัดทำดัชนี มันทำให้ฉันลำบากในการเขียนการทดสอบแบบดั้งเดิมที่สิ้นเปลืองจากการคำนวณ แต่ไบต์เป็นไบต์หลังจากทั้งหมด

หากเราอนุญาตให้มีสิ่งที่เปราะบางจริงๆให้รวบรวมเครื่องของฉันโดยไม่มีการปรับปรุงด้วย GCC 7.1.1 94 ไบต์ต่อไปนี้ทำงานได้ (ขอบคุณ@Conor O'Brien )

i,c,m,k;f(n){c=i=1;for(;++i<n;c+=m==k){for(k=m=1;m*=10,m<i;);for(m=i*m+i-1;++k<m&&m%k;);}n=c;}

ไม่เช่นนั้น 99 ไบต์จะมีประสิทธิภาพมากกว่า

i,c,m,k;f(n){c=i=1;for(;++i<n;c+=m==k){for(k=m=1;m*=10,m<i;);for(m=i*m+i-1;++k<m&&m%k;);}return c;}

โปรแกรมเต็มสามารถอ่านได้เพิ่มเติม:

i,c,m,k;
f(n){
    c=i=1;
    for(;++i<n;c+=m==k){
        for(k=m=1;m*=10,m<i;);
        for(m=i*m+i-1;++k<m&&m%k;);
    }
    return c;
}

int main(int argc, char *argv[])
{
    printf("%d\n", f(atoi(argv[1])));
    return 0;
}

ขึ้นอยู่กับคอมไพเลอร์ของคุณคุณอาจสามารถบันทึกบางไบต์โดยใช้n=c;แทนreturn c;:i,c,m,k;f(n){c=i=1;for(;++i<n;c+=m==k){for(k=m=1;m*=10,m<i;);for(m=i*m+i-1;++k<m&&m%k;);}n=c;}
Conor O'Brien

ฉันไม่สามารถพูดได้ว่าฉันต้องการใช้สิ่งต่าง ๆ ที่ดูเหมือนจะแตกต่างกันไปตามระดับการปรับให้เหมาะสม การใช้ GCC โดยไม่มีการปรับให้เหมาะสม -O0 ใช้ได้กับการเพิ่มประสิทธิภาพอื่น ๆ ที่ไม่ได้ทำไว้ ที่น่าสนใจ -O1 -O2 และ -O3 จะคืนค่า 0 โดยที่ -Os ส่งคืน 1 โดยที่ -Og ส่งคืน n-1
algmyr

คุณสามารถระบุในคำตอบของคุณว่าควรรวบรวมโปรแกรมของคุณอย่างไร
Conor O'Brien

ฉันเดาว่ารู้สึกถูกนิดหน่อย แต่ฉันสามารถเพิ่มทางเลือกอื่นได้
algmyr

ฉันเข้าใจ แต่ฉันจะไม่รู้สึกแย่กับการทำเช่นนั้น - มันเป็นหนึ่งในเคล็ดลับสำหรับการเล่นกอล์ฟใน C
Conor O'Brien

2

JavaScript (ES6),  49 48  47 ไบต์

1 การจัดทำดัชนี ถูก จำกัด ด้วยขนาดการโทรซ้อนของเครื่องยนต์ของคุณ

f=n=>n&&f(n-2)+(p=n=>n%--x?p(n):x<2)(x=n+[--n])

ลองออนไลน์!



0

QBICขนาด 25 ไบต์

[:|p=p-µa*z^_l!a$|+a-1}?p

คำอธิบาย

[:|     FOR a = 1 to <n>
p=p-    Decrement p (the counter) by
µ       -1 if the following is prime, or 0 if not
        For the concatenating, we multiply 'a' by 10^LENGTH(a), then add a-1$┘p
        Example 8, len(8) = 1, 8*10^1 = 80, add 8-1=7, isPrime(87) = 0
a*z^_l!a$|+a-1
}       Close the FOR loop - this also terminates the prime-test
?p      Print p, the 0-based index in the sequence.

สิ่งนี้ใช้คณิตศาสตร์ - สิ่งที่เกี่ยวเนื่องกับการโยนตวัดเพื่อวัดที่ดี การทำให้รุ่นหมวกทำเพียงการต่อข้อมูลแบบสตริงเท่านั้น แต่จะมีความยาวหนึ่งไบต์:

[:|A=!a$+!a-1$┘p=p-µ!A!}?p

0

PHP , 203 ไบต์

<?php $n=($a=$argv[1]).($a-1);$p=[2];$r=0;for($b=2;$b<=$n;$b++){$x=0;if(!in_array($b,$p)){foreach($p as $v)if(!($x=$b%$v))break;if($x)$p[]=$b;}}for($b=1;$b<=$a;$b++)if(in_array($b.($b-1),$p))$r++;die $r;

ลองออนไลน์!

ใช้ดัชนีที่ใช้ 1 สำหรับเอาต์พุต ลิงก์ TIO มีรหัสที่สามารถอ่านได้


0

Ruby , 42 + 9 = 51 ไบต์

ใช้-rprime -nธง 1 การจัดทำดัชนี

ทำงานโดยการนับตัวเลขทั้งหมดเท่ากับหรือต่ำกว่าอินพุตที่เป็นไปตามเงื่อนไข (หรือมากกว่านั้นในทางเทคนิคตัวเลขทั้งหมดที่เป็นไปตามn-1เงื่อนไข) เนื่องจากอินพุตมีการรับประกันว่าจะอยู่ในลำดับจึงไม่มีความเสี่ยงของข้อผิดพลาดจากอินพุตสุ่มแบบ7ที่ไม่ "กลายเป็นไพร์ม"

p (?3..$_).count{|i|eval(i.next+i).prime?}

ลองออนไลน์!




0

Java 8, 108 ไบต์

n->{for(long r=0,q=1,z,i;;){for(z=new Long(q+""+~-q++),i=2;i<z;z=z%i++<1?0:z);if(z>1)r++;if(q==n)return r;}}

0 การจัดทำดัชนี

คำอธิบาย:

ลองออนไลน์

n->{                             // Method with integer parameter and long return-type
  for(long r=0,                  //  Result-long, starting at 0
      q=1,                       //  Loop integer, starting at 1
      z,i;                       //  Temp integers
      ;){                        //  Loop indefinitely
    for(z=new Long(q+""+~-q++),  //   Set z to `q` concatted with `q-1`
        i=2;i<z;z=z%i++<1?0:z);  //   Determine if `z` is a prime,
      if(z>1)                    //   and if it indeed is:
        r++;                     //    Increase the result-long by 1
      if(q==n)                   //   If `q` is now equal to the input integer
        return r;}}              //    Return the result

0

Stax , 10 ไบต์

1- จัดทำดัชนี

Äm▬á┌╕|°φ♦

รันและดีบัก คำอธิบาย

Rxr\{$e|pm|+         #Full program, unpacked, implicit input  (Example (4))
R                    #Create [1 to input] range  (ex [1,2,3,4] )             
 x                   #Copy value from x register (ex (4) )
  r                  #Create [0 to input-1] range (ex [0,1,2,3)
   \                 #Create array pair using the range arrays (ex [[1,0],[2,1],[3,2],[4,3]])
    {    m           #Map block
     $e|p            #To string, eval string (toNum), isPrime (ex [1,0] => "10" => 10 => 0)
          |+         #Sum the array to calculate number of truths (ex [0,0,0,1] => 1)

0

เรียบร้อย 33 ไบต์

index({n:prime(n.n-1|int)}from N)

ลองออนไลน์!

คำอธิบาย

แนวคิดพื้นฐานคือการสร้างลำดับของตัวเลขที่ถูกต้องแล้วส่งกลับฟังก์ชันดัชนี curried

index({n:prime(n.n-1|int)}from N)
      {n:                }from       select all numbers `n` from...
                               N     the set of natural numbers, such that:
               n.n-1                     `n` concatenated with `n-1`
                    |int                 ...converted to an integer
         prime(         )                ...is prime
index(                          )    function that returns index of input in that sequence
โดยการใช้ไซต์ของเรา หมายความว่าคุณได้อ่านและทำความเข้าใจนโยบายคุกกี้และนโยบายความเป็นส่วนตัวของเราแล้ว
Licensed under cc by-sa 3.0 with attribution required.