도전
아래에서 소수를 찾기 위해 Sundaram 체 를 구현 하십시오n
. 입력 정수를 가져 와서 n
아래의 소수를 출력하십시오 n
. n
항상 백만보다 작거나 같다고 가정 할 수 있습니다 .
체
에서
1
까지 의 정수 목록으로 시작하십시오n
.다음과 같은 형식의 모든 숫자를 제거하십시오
i + j + 2ij
.i
그리고j
보다 작은n
.j
는 항상 크i
거나 같습니다1
. 이보다 크거나 같습니다 .i + j + 2ij
이하n
나머지 수에을 곱하고을 더
2
합니다1
.
이 경우 소수 2
보다 작은 모든 소수 ( 출력에 포함되어야 함 제외 )가 생성 2n + 2
됩니다.
다음은 소수를 찾는 데 사용되는 체의 애니메이션입니다 202
.
산출
출력은 모든 소수 ≤ n
(오름차순)와 개행 문자 여야합니다 .
2
3
5
어디 n
입니다 5
.
예
> 10
2
3
5
7
> 30
2
3
5
7
11
13
17
19
23
29
입력은로 표시됩니다 >
.
(i,j)
로 i<=j
우리는이 요구 사항을 무시하면,하지만 결과는 변경되지 않습니다. 바이트를 절약하기 위해 그렇게 할 수 있습니까?
i <= j
. 그것은 체가 작동하는 방식의 일부입니다. 예, i <= j
코드를 생략 할 수 있습니다 . @xnor
2n+1
이 아닌 모든 홀수를 선택하는 것과 같습니다 (결과가 형식이기 때문에 ) 2(i + j + 2ij)+1
. 잠재적 소수에 대해이 속성을 직접 테스트하거나 코드 가 특정 시점에서 2 더하기 1을 수행해야합니까? ?
n
전체에있는 것에 약간 혼란 스럽습니다 . 방법 설명에서는 최대 소수까지 모든 소수를 생성한다고 말합니다 2 * n + 2
. 그러나 입력 / 출력 설명에서 입력은 n
이며 출력은 모두 최대 n
입니다. 그래서 우리는 모든 소수를 생성하기 위해 메소드를 적용 하고 출력 2 * n + 2
보다 큰 소수 를 버려야 n
합니까? 또는 n
입력에서 메소드 설명에서를 계산해야 n
합니까?
n=30
출력에 29 예제 가 없습니다.