숫자조차 소수가 될 수 있습니까?


24

시퀀스

모두 소수만이 소수라는 것을 알고 2있습니다. hum 그러나, 어떤 경우에도 번호가 n와 연결하면 n-1, 그들은 이 될 소수가.

우선 은 소수가 아니기 1때문에 목록에 10없습니다. 2( 21) 및 3( 32) 와 유사합니다 . 그러나 소수 4이기 때문에 작동하므로 43시퀀스의 첫 번째 숫자입니다 a(1) = 4. 다음 숫자 그 작품 (도 6( 65) 나 8( 87) 작업)입니다 10때문에, 109소수 때문에, a(2) = 10. 그런 다음 소수 22이기 때문에을 더 건너 뜁니다 . 등등.2221a(3) = 22

이 시퀀스의 모든 용어는 짝수입니다. n연결될 때 홀수 n-1가 짝수 (예 :로 3바뀝니다 32) 가 되기 때문에 절대 소수가 아닙니다.

OEIS의 시퀀스 A054211 입니다.

도전

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입니다. 그것은 특별하지 않습니다-소수가 작동하는 방식입니다.
Esolanging 과일

답변:


11

젤리 ,  8  7 바이트

ḊżṖVÆPS

시퀀스 멤버를 가져 와서 시퀀스에서 인덱스를 반환하는 모나드 링크.

온라인으로 사용해보십시오!

방법?

ḊżṖ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 나를 위해 쓰러지지 않았는지, 아마도 다시 돌아 왔을 까?
코너 오브라이언

1
2 분 전에 수정 됨 :)
Jonathan Allan

아름다운! 그 zip(head(), pop())트릭은 정말 멋지다. :)
DJMcMayhem

7 바이트는 어떤 인코딩입니까?
kylefinn

1
@kylefinn Jelly는 자체 코드 페이지를 가지고 있으며, 헤더의 bytes 링크를 클릭하면 볼 수 있습니다.
Jonathan Allan

8

하스켈 , 80 75 70 바이트

Laikoni 덕분에 5 바이트 절약

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

온라인으로 사용해보십시오!

@ nmjmcman101 덕분에 1-2 바이트가 절약되고 @Dennis 덕분에 2 바이트가 절약되었습니다!

설명:

     µ€   # 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'이 소수 인지 여부를 확인할 수 없기 때문 입니다.
아웃 골퍼 에릭

5

껍질 , 13 11 10 바이트

1인덱스 솔루션 :

#ȯṗdS¤+d←ḣ

온라인으로 사용해보십시오!

언 골프 / 설명

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

-3바이트 @Zgarb 감사 합니다!


1
£İp와 같습니다 . 또한 #…ḣ대신 바이트를 사용 하여 바이트를 저장할 수 £f…N있습니다.
Zgarb


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


가! 이유는 무엇을 위해 그런의 맹점이 있습니까 ÆÇ?! 감사합니다, @Oliver; 컴퓨터로 돌아 오면 업데이트하겠습니다.
Shaggy

2o+X(후행 공간 포함) 대신 [XXÉ]자동 균형 []괄호를 사용하면 솔루션이 바이트보다 짧아집니다. (실제로 2, 그렇게 할 수 있기 때문에 õ_ZÉ]¬nÃèj)
ETHproductions

@ETHproductions : 요즘 배열을 사용할 때 가장 중요한 것은 자동 균형 조정이 추가되었는지 확인하는 것입니다 []! : D
얽히고 설킨

어떤 이유로 나는 세미콜론이 완전히 작동을 멈췄다 고 생각하므로 문제를 해결하려고 노력할 것입니다. 그래도 내일 오후까지 기회가 있다고 생각하지 마십시오.
ETHproductions

3

로다 , 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불행히도, 그 당시에는 내가 직접 트릭을 찾지 못했다는 점입니다.)
Jim


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

프로그램을 컴파일하는 방법을 항상 답에 지정할 수 있습니다.
코너 오브라이언

나는 조금 싸다고 느낀다. 그러나 대안을 추가 할 수 있습니다.
algmyr

이해하지만, 그렇게하는 것에
Conor O'Brien


1

Mathematica, 77 바이트

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

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.

이것은 좋은 측정을 위해 캐스트-투-캐스트와 함께 꽤 복잡한 수학을 사용합니다. 버전 모자를 만드는 것은 문자열 기반 연결만으로 1 바이트 더 길어집니다.

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

루비 , 42 + 9 = 51 바이트

-rprime -n플래그를 사용합니다 . 1- 색인.

조건을 충족시키는 입력과 같거나 그 이하의 모든 숫자 (또는 기술적으로 조건을 충족시키는 모든 숫자)를 계산하여 작동합니다 n-1. 입력이 순서대로 보장되므로 7"프라임이되지 않는" 임의의 입력으로 인한 오류의 위험 이 없습니다.

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

온라인으로 사용해보십시오!




0

자바 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)

온라인으로 사용해보십시오!

설명

기본 아이디어는 유효한 숫자의 시퀀스를 만든 다음 카레 인덱스 함수를 반환하는 것입니다.

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.