이 질문은 n
소수 를 찾는 데있어 비틀어 질 것 입니다.
도전
당신은 하나 개의 입력을하는 프로그램 작성해야 n
및 출력 n
진수 표현의 진수 표현이 포함되어 일 소수 n
subtring로합니다.
혼란 스러운가? 여기 몇 가지 예가 있어요.
n=1
Primes: 2, 3, 5, 7, 11
^1 first prime that contains a 1
Output: 11
n=2
Primes: 2, 3, 5, 7, 11, 13, 17, 19, 23
^1 ^2 second prime that contains a 2
Output: 23
n=3
Primes: 2, 3, 5, 7, 11, 13, 17, 19, 23
^1 ^2 ^3 third prime that contains a 3
Output: 23
n=10
Primes: 2, 3, 5, 7, 11, ..., 97, 101, 103, 107, 109, ..., 997, 1009, 1013, 1019, 1021, 1031, 1033
^1 ^2 ^3 ^4 ^5 ^6 ^7 ^8 ^9 ^10 tenth prime that contains a 10
Output: 1033
이것은 code-golf 이므로 가장 낮은 바이트 수가 이깁니다.
혼란스러운 점이 있으면 의견을 남겨주세요.
답변
05AB1E , 8 바이트
암호:
µN¹åNp*½
설명:
µ # Run this until the counting variable has reached the input value.
N¹å # Check if the input number is in the range variable.
Np # Check if the range variable is prime.
* # Multiply those two numbers (which is basically an AND operator).
½ # If true, increment the counting variable.
# After the loop, the stack is empty and implicitly prints N.
CP-1252 인코딩을 사용합니다 . 온라인으로 사용해보십시오! .
답변
답변
파이썬 2, 67 65 62 바이트
f=lambda n,k=0,m=2,p=1:k/n or-~f(n,k+p%m*(`n`in`m`),m+1,p*m*m)
Ideone에서 테스트하십시오 .
작동 원리
우리는 윌슨 정리의 목록을 사용합니다 .
항상 변수 p 는 계승 m-1 의 제곱과 같습니다 .
k <n 인 경우 0k/n
을 산출 하고 f 를 재귀 적으로 호출합니다. m는 증분되고 (P)가 갱신되고, k는 증분 경우에만, m은 포함 된 소수 n이 .
후자의 결과를 가산함으로써 실현 p%m*(`n`in`m`)
하는 케이 . m 이 소수 이면 윌슨 정리의 결과에 따라 1을p%m
리턴 하고 그렇지 않으면 0 을 리턴합니다 .
일단 케이 도달 N , 우리는 발견 Q 는 N 번째 포함 프라임 N을 .
우리는 확인하는 동안 다음 호출에 있으므로 m = q + 1 입니다. k/n
는 1 을 반환 하고 비트 연산자 -~
는 모든 함수 호출에 대해 해당 숫자를 한 번 증가시킵니다. 이 걸리므 Q – 1 호출 F 증분 m 에서 2 행 Q + 1 에 최 호 F는 리턴 1 + Q를 – 1 = Q를 의도한다.
답변
배쉬, 27 바이트
primes 0|grep $1|sed $1q\;d
primes
bsdgames에서 온 것입니다.
입력을 명령 행 인수로 사용하여 STDOUT에 출력합니다.
답변
답변
Mathematica, 75 바이트
Nest[NestWhile[b=NextPrime,b@#,!StringContainsQ@@ToString/@{#,a}&]&,1,a=#]&
여전히 골프를 탈 수 있습니다.
답변
자바 194 180 173 171 112 바이트
암호:
a->{int i=1,j,n,r=0;for(j=n=new Integer(a);(r+=++i>=j&(""+j).contains(""+n)?1:0)!=n;j+=j%i==0?i=1:0);return j;}
언 골프 드 :
class P{
static int i=1,j,n,r;
public static void main(String[]s) {
for(
j=n=new Integer(s[0]); //executes once before first iteration
(r+=++i>=j&(""+j).contains(""+n)?1:0)!=n; //executes on first and every iteration
j+=j%i==0?i=1:0 //executes after first and every iteration
) {
;
}
System.out.print(j);
}
}