Số chẵn có thể trở thành số nguyên tố?


24

Trình tự

Mọi người đều biết số nguyên tố duy nhất là 2. Hồ-hum. Nhưng, có một số số chẵn nhất định n, khi được nối với nhau n-1, chúng trở thành một số nguyên tố.

Đối với người mới bắt đầu, 1không có trong danh sách, bởi vì 10không phải là chính. Tương tự với 2( 21) và 3( 32). Tuy nhiên, 4hoạt động vì 43là số nguyên tố, vì vậy đây là số đầu tiên trong chuỗi a(1) = 4. Số tiếp theo hoạt động (không 6( 65) hay 8( 87) hoạt động) là 10, bởi vì 109là số nguyên tố, vì vậy a(2) = 10. Sau đó, chúng tôi bỏ qua một bó nhiều hơn cho đến khi 22, bởi vì 2221là nguyên tố, vì vậy a(3) = 22. Và như vậy.

Rõ ràng tất cả các thuật ngữ trong chuỗi này là chẵn, bởi vì bất kỳ số lẻ nnào khi được nối với đều n-1trở thành chẵn (như 3biến thành 32), sẽ không bao giờ là số nguyên tố.

Đây là trình tự A054211 trên OEIS.

Các thách thức

Cho một số đầu vào nphù hợp với một nơi nào đó trong chuỗi này (nghĩa là nnối với n-1là số nguyên tố), xuất vị trí của nó trong chuỗi này. Bạn có thể chọn 0 hoặc 1 chỉ mục, nhưng vui lòng nêu rõ trong bài gửi của bạn.

Quy tắc

  • Đầu vào và đầu ra có thể được coi là phù hợp với kiểu số nguyên của ngôn ngữ của bạn.
  • Đầu vào và đầu ra có thể được đưa ra trong bất kỳ định dạng thuận tiện .
  • Một chương trình đầy đủ hoặc một chức năng được chấp nhận. Nếu một chức năng, bạn có thể trả lại đầu ra thay vì in nó.
  • Nếu có thể, vui lòng bao gồm một liên kết đến một môi trường thử nghiệm trực tuyến để người khác có thể thử mã của bạn!
  • Sơ hở tiêu chuẩn bị cấm.
  • Đây là vì vậy tất cả các quy tắc chơi gôn thông thường đều được áp dụng và mã ngắn nhất (tính bằng byte) sẽ thắng.

Ví dụ

Các ví dụ dưới đây là 1 chỉ mục.

n = 4
1

n = 100
11

n = 420
51

1
Tại sao bạn phải làm điều đó ngược lại? cQuents không có chế độ đó :(
Stephen

4
@StepHen Chỉ cần thay đổi tốc độ; một cái gì đó khác với bình thường.
admBorkBork

9
Tôi cảm thấy điều này sẽ tốt hơn nhiều như là một vấn đề quyết định.
Thuật sĩ lúa mì

4
Không chỉ là 2 số nguyên tố duy nhất chia hết cho 2, 3 còn là số nguyên tố duy nhất chia hết cho 3 và 5 là số nguyên tố duy nhất chia hết cho 5. Nói chung, một số nguyên tố nluôn là số nguyên tố duy nhất chia hết cho n. Nó không đặc biệt - đó chỉ là cách các số nguyên tố hoạt động.
Esolanging Fruit

Câu trả lời:


11

Thạch ,  8  7 byte

ḊżṖVÆPS

Một liên kết đơn âm lấy một thành viên chuỗi và trả về chỉ mục của nó trong chuỗi.

Hãy thử trực tuyến!

Làm sao?

ḊżṖ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 không thất vọng với tôi, có lẽ nó đã trở lại?
Conor O'Brien

1
Đã sửa từ 2 phút trước :)
Jonathan Allan

Đẹp! zip(head(), pop())Thủ thuật đó thực sự rất tuyệt. :)
DJMcMayhem

Trong 7 mã hóa đó là gì?
kylefinn

1
@kylefinn Jelly có trang mã riêng, nhấp vào liên kết byte trong tiêu đề để xem.
Jonathan Allan

8

Haskell , 80 75 70 byte

Tiết kiệm 5 byte nhờ Laikoni

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

Hãy thử trực tuyến!


1
Tôi nghĩ rằng bạn có thể sử dụng bài kiểm tra chính ngắn hơn p x=all((>0).mod x)[2..x-1]thất bại trong 1, nhưng điều này không thành vấn đề trong trường hợp này.
Laikoni

1
Cũng show x++show(x-1)có thể được rút ngắn để show=<<[x,x-1].
Laikoni

@Laikoni Cảm ơn những lời khuyên! Tôi nghĩ rằng showcó thể được thực hiện trong một phương pháp ngắn hơn nhưng tôi đã không nghĩ đến một bản đồ concat vì một số lý do.
Thuật sĩ lúa mì

6

Thạch , 12, 10 , 8 byte

;’VÆPµ€S

Hãy thử trực tuyến!

1-2 byte được lưu nhờ vào @ nmjmcman101 và 2 byte được lưu nhờ @Dennis!

Giải trình:

     µ€   # 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 

Bạn có thể bỏ R và sử dụng phạm vi ngầm?
nmjcman101

@ nmjcman101 Tôi hoàn toàn không biết đó là một điều. Cảm ơn!
DJMcMayhem

5

05AB1E , 9 8 7 byte

ƒNN<«pO

Sử dụng mã hóa 05AB1E . Hãy thử trực tuyến!

Giải trình

ƒ          # 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)

Tất nhiên, điều này lợi dụng thực tế là 05AB1E bỏ qua lỗi ... bởi vì tôi không nghĩ bạn có thể kiểm tra xem có phải '0-1'là số nguyên tố hay không.
Erik the Outgolfer

5

Husk , 13 11 10 byte

1giải pháp -exexed:

#ȯṗdS¤+d←ḣ

Hãy thử trực tuyến!

Ungolfed / Giải thích

         ḣ -- 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

Cảm ơn @Zgarb cho -3byte!


1
£İptương đương với . Ngoài ra, bạn có thể lưu một byte với #…ḣthay vì £f…N.
Zgarb


4

Bình thường , 12 byte

smP_s+`d`tdS

Hãy thử trực tuyến! hoặc Xác minh tất cả các trường hợp thử nghiệm.


Làm sao?

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 byte

1 chỉ mục.

ÇsiZÄÃèj

Thử nó

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


Trời ạ! Tại sao tôi có một điểm mù như vậy cho ÆÇ?! Cảm ơn, @Oliver; Tôi sẽ cập nhật khi tôi quay lại máy tính.
Xù xì

2o+X(với không gian dấu) sẽ hoạt động thay thế [XXÉ], mặc dù nếu tôi đi xung quanh các []dấu ngoặc tự động cân bằng, giải pháp của bạn sẽ ngắn hơn một byte. (Trên thực tế là 2, vì sau đó bạn có thể làm õ_ZÉ]¬nÃèj)
ETHproductions

@ETHproductions: Những ngày này, điều đầu tiên tôi làm khi làm việc với một mảng là kiểm tra xem liệu cân bằng tự động đã được thêm vào chưa []! : D
Xù xì

Vì một số lý do, tôi nghĩ rằng dấu chấm phẩy đã hoàn toàn ngừng hoạt động, vì vậy tôi sẽ cố gắng khắc phục điều đó. Đừng nghĩ rằng tôi sẽ có cơ hội cho đến chiều mai.
Sản phẩm ETH

3

Röda , 73 byte

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

Hãy thử trực tuyến!

1 chỉ mục. Nó sử dụng luồng để làm đầu vào và đầu ra.

Giải trình:

{
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

Bình thường , 14 byte

lfP_Tms+`d`tdS

Hãy thử trực tuyến!

Giải trình

              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

Bạn đánh tôi vài giây, tôi đánh bạn vài byte: P
Ông Xcoder

@ Mr.Xcoder Phiên bản đầu tiên của tôi là lfTmP_s+`d`tdS, thật không may là tôi đã không tự mình tìm ra mánh khóe của bạn :)
Jim

2

Perl 6 , 45 byte

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

Hãy thử trực tuyến!

Việc greptạo ra chuỗi các số đủ điều kiện, sau đó chúng tôi tìm khóa ( :k) (tức là chỉ mục) của firstsố trong danh sách bằng với tham số đầu vào $_.



2

C, 99 94 byte

1 chỉ mục. Tôi đau đớn khi viết các bài kiểm tra nguyên thủy rất lãng phí về mặt tính toán, nhưng rốt cuộc thì byte là byte.

Nếu chúng tôi cho phép một số thứ thực sự dễ vỡ, biên dịch trên máy của tôi mà không tối ưu hóa với GCC 7.1.1, 94 byte sau hoạt động (cảm ơn @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;}

mặt khác, 99 byte mạnh mẽ hơn này thực hiện công việ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;}

Chương trình đầy đủ, dễ đọc hơn một chút:

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;
}

Tùy thuộc vào trình biên dịch của bạn, bạn có thể lưu một số byte bằng cách sử dụng n=c;thay vì 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

Tôi không thể nói rằng tôi muốn sử dụng những thứ thậm chí có vẻ thay đổi theo mức độ tối ưu hóa. Sử dụng GCC, không có tối ưu hóa -O0, nó hoạt động, với các cờ tối ưu hóa khác thì không. Thật thú vị -O1 -O2 và -O3 nó trả về 0, với -Os nó trả về 1, với -Og nó trả về n-1.
algmyr

Bạn luôn có thể chỉ định trong câu trả lời của bạn về cách chương trình của bạn sẽ được biên dịch.
Conor O'Brien

Tôi đoán, cảm thấy một chút giá rẻ. Nhưng tôi có thể thêm một sự thay thế.
algmyr

Tôi hiểu, nhưng tôi sẽ không cảm thấy tệ khi làm điều đó-- đó là một trong những mẹo chơi golf trong C
Conor O'Brien

2

JavaScript (ES6),  49 48  47 byte

1 chỉ mục. Giới hạn bởi kích thước ngăn xếp cuộc gọi của động cơ của bạn.

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

Hãy thử trực tuyến!


1

Toán học, 77 byte

Position[Select[Range@#,PrimeQ@FromDigits[Join@@IntegerDigits/@{#,#-1}]&],#]&

0

QBIC , 25 byte

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

Giải trình

[:|     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.

Điều này sử dụng một số điều toán học khá liên quan với một chuỗi được tát vào chuỗi cho phép đo tốt. Làm một chiếc mũ phiên bản chỉ thực hiện nối chuỗi dựa trên chuỗi dài hơn một byte:

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

0

PHP , 203 byte

<?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;

Hãy thử trực tuyến!

Sử dụng một chỉ số dựa trên 1 cho đầu ra. Liên kết TIO có phiên bản mã có thể đọc được.


0

Ruby , 42 + 9 = 51 byte

Sử dụng các -rprime -ncờ. 1 chỉ mục.

Hoạt động bằng cách đếm tất cả các số bằng hoặc dưới đầu vào đáp ứng điều kiện (hoặc kỹ thuật hơn, tất cả các số đáp ứng n-1điều kiện). Vì đầu vào được đảm bảo theo thứ tự, nên không có rủi ro xảy ra lỗi từ đầu vào ngẫu nhiên như thế 7không "trở thành số nguyên tố".

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

Hãy thử trực tuyến!




0

Java 8, 108 byte

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;}}

Chỉ số 0

Giải trình:

Hãy thử trực tuyến.

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 byte

1- Lập chỉ mục

Äm▬á┌╕|°φ♦

Chạy và gỡ lỗi nó Giải thích

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

Gọn gàng , 33 byte

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

Hãy thử trực tuyến!

Giải trình

Ý tưởng cơ bản là tạo ra một chuỗi các số hợp lệ sau đó trả về hàm chỉ mục bị cong.

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
Khi sử dụng trang web của chúng tôi, bạn xác nhận rằng bạn đã đọc và hiểu Chính sách cookieChính sách bảo mật của chúng tôi.
Licensed under cc by-sa 3.0 with attribution required.