N이 스토머 숫자가 되려면 표현식 N^2+1의 가장 높은 소인수는 2*N보다 크거나 같아야 하며 양의 정수여야 합니다.
예를 들어 4는 스토머 숫자입니다. 4*4+1=17은 8보다 큰 최대 소인수 17을 갖기 때문입니다. 즉, 2*4입니다.
그러나 3*3+1=10이기 때문에 3은 강한 숫자가 아닙니다. 10의 가장 큰 소인수는 5이며, 이는 6보다 작은 2*3입니다.
이 문제에는 양의 정수 N이 주어지며, 우리의 목표는 첫 번째 N개의 스토머를 출력하는 것입니다.
입력: 4
OUTPUT: 1 2 4 5
첫 번째 4개의 Stormer 번호는 다음과 같습니다. 3은 Stormer 번호가 아니므로 포함되지 않습니다.
숫자 (N^2+1)의 가장 큰 소인수를 찾아 임의의 변수에 저장하세요.
소인수가 2*N보다 크거나 같은지 확인하세요.
조건을 만족하면 스토머 넘버입니다.
i가 N보다 작거나 같을 때까지 모든 스토머 수를 인쇄하세요.
위 알고리즘을 코드에 구현하려면 두 가지 함수를 만들어야 합니다. 첫째, 각 경우에 대해 가장 높은 소인수를 찾고, 둘째, 그것이 2*N보다 크거나 같은지 확인하고 다음과 같은 경우 숫자를 계속 인쇄해야 합니다. 동시에 스토머 번호입니다.
모든 숫자 n −
에 대한 표현의 가장 높은 소인수(n^2+1)를 찾으려면나머지가 0이 될 때까지 숫자를 2로 나누고 2를 primemax에 저장합니다.
이제 n은 이 시점에서 홀수여야 하므로 for 루프에서 반복하고 i=3부터 n의 제곱근까지 홀수만 반복합니다.
이제 i를 primemax에 저장하고 내가 n을 나누는 동안 n을 i로 나눕니다. n을 나누지 못하면 2로 올리고 계속하세요.
n이 2보다 큰 소수인 경우 n은 처음 두 단계에서 1이 되지 않으므로 n을 primemax에 저장하고 primemax를 반환합니다.
다음 기능은 해당 번호가 스토머 번호인지 확인하는 것입니다. 그렇다면 인쇄해 보겠습니다.
첫 번째 N개의 스토머 수를 계산하기 위해 변수 temp를 0으로 선언합니다.
i=1에서 시작하여 temp가 N보다 작기 전에 루프 반복을 수행합니다.
(i*i+1)의 가장 큰 소인수가 2*i보다 크거나 같은지 확인하세요. 위 조건이 참이면 i를 출력하고 temp를 1씩 증가시킵니다.
아래는 위의 접근 방식을 C++로 구현한 것입니다 −
으아악이 글에서는 첫 번째 N Stormer 번호를 인쇄하는 문제를 해결하려고 합니다.
우리는 숫자의 소인수를 계산하는 방법도 배웠습니다. 이 기사가 이 문제에 대한 모든 의심을 해결하는 데 도움이 되었기를 바랍니다.
위 내용은 폭풍우 숫자의 상세 내용입니다. 자세한 내용은 PHP 중국어 웹사이트의 기타 관련 기사를 참조하세요!