我對編程有點新,現在試圖找到項目歐拉最大的主因子600851475143。當我真正嘗試並進行Fermat Primality測試時,我的代碼不會編譯。C++長長的費馬原始性測試的最大素因子
#include <iostream>
#include <cmath>
#include <cstdlib>
using namespace std;
int main() {
long long int num = 600851475143;
long long int factor = num/2;
for (long long factor; factor > 0; factor--) {
//Use Fermat primality test.
if (num % factor == 0) {
long long int testNum1 = rand() % 50 + 1;
long long int testNum2 = rand() % 50 + 1;
long long int test1 = (pow(testNum1, factor - 1) % factor);
long long int test2 = (pow(testNum2, factor - 1) % factor);
if (test1 == 1 && test2 == 1){
cout << "The greatest prime factor is: " << factor;
break;
}
}
}
return 0;
}
發佈有關構建問題/錯誤的問題時,請始終在問題主體中包含完整和未編輯的錯誤輸出。請編輯您的問題以包含它,並顯示錯誤在您的來源中的位置。 –
這是一個奇怪的因數分解嘗試。我不確定Fermat的素性檢驗是如何適用的:它可以以一定的概率告訴你一個給定的數字是否爲素數,如果它可能不是非素數,就不會告訴任何它的影響因素。你也用'pow'計算huuuge數字(不起作用),並迭代可能的很多數字(循環從600851475143/2下降到1)。 – WhiteViking
啊,也許你想實施費馬的因子分解方法呢? https://en.wikipedia.org/wiki/Fermat%27s_factorization_method(這個傢伙知道一些關於數字的東西:-) – WhiteViking