C에서 거대한 숫자의 가장 큰 소수 요소를 찾으려고합니다. 100 또는 10000과 같은 작은 숫자는 제대로 작동하지만 실패합니다. 실패로 인해 계속 유지됩니다. 실행 및 실행 내 core2duo 및 i5에서 수십 분 동안 매우 큰 target
숫자입니다 (대상 번호에 대한 코드 참조). 내 알고리즘이 맞습니까?C 코드가 영원히 계속 실행됩니다. *
저는 C가 생소하고 큰 숫자로 인해 어려움을 겪습니다. 내가 뭘 원하는 건 정정이나 지침이 아닙니다 bignum 바인딩 및 물건 (아직 나는 시도했지만 꽤 확실한)와 파이썬을 사용하여 할 수있는 솔루션이 아니지만 아니면 내가 몇 가지 작은 실수를했을 수도 있습니다 실현 너무 피곤, 어쨌든 여기에 내가 쓴 코드 :
#include <stdio.h>
// To find largest prime factor of target
int is_prime(unsigned long long int num);
long int main(void) {
unsigned long long int target = 600851475143;
unsigned long long int current_factor = 1;
register unsigned long long int i = 2;
while (i < target) {
if ((target % i) == 0 && is_prime(i) && (i > current_factor)) { //verify i as a prime factor and greater than last factor
current_factor = i;
}
i++;
}
printf("The greates is: %llu \n",current_factor);
return(0);
}
int is_prime (unsigned long long int num) { //if num is prime 1 else 0
unsigned long long int z = 2;
while (num > z && z !=num) {
if ((num % z) == 0) {return 0;}
z++;
}
return 1;
}
이제까지는 현재 위치를 확인하기 위해 디버거에서 들렸다? 나는 컨텍스트없이 코드를 읽는 것으로 가정 할 것이다. is_prime 오버 플로우로 인해 루프가 멈출 수도있다. – X39
아니,하지만 printf를 추가하여 코드가 제대로 작동하는지 알 수있다. 그러나 얼마나 오래? –
'is_prime'을 반으로 최적화 : 짝수를 테스트하고,'z = 3'을 설정하고 루프의 반복마다 2 씩 증가시킵니다. –