совет, как сделать мой алгоритм быстрее
Вот мой код на C для задачи № 3 из проекта Эйлера, где я должен найти самый большой простой множитель из 600851475143.
#include <stdio.h>
#include <stdlib.h>
bool is_prime(long int number){
long int j;
for (j=2; j<=number/2; j++){
if (number%j==0) return false;
if (j==number/2) return true;
}
}
int main(){
long int input;
scanf("%d", &input);
long int factor;
int ans=0;
for (factor=input/2; factor>1; factor--){
if (input%factor==0 && is_prime(factor)) {
ans = factor;
break;
}
}
printf("%d\n", ans);
system("pause");
return 0;
}
Хотя он отлично работает для небольших чисел, постепенно ему требуется все больше и больше времени, чтобы дать ответ. И, наконец, для 600851475143 код возвращает 0, что явно неверно. Может ли кто-нибудь помочь? большое спасибо.