Cで巨大な数値の最大の素因数を見つけようとしていますが、100や10000のような小さな数値に対してはうまく動作しますが失敗します。私のcore2duoとi5)の数十分間、非常に大きいtarget
の番号(対象番号のコードを参照してください) アルゴリズムは正しいですか?Cコードは永遠に実行し続けます*
私はCの新人であり、大きな数字で本当に苦労しています。私が欲しいのは、訂正やガイダンスは解決策ではありません。私はbignumバインディングやものでpythonを使ってこれを行うことができます(私はまだ試していませんが、確かにです)。あるいは、私はいくつかの小さな間違いをしているかもしれません実現するにはあまりにも疲れて、とにかくここに私が書いたコードです:
#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でインクリメントします。 –