#include <iostream>
using namespace std;
int prim( long long x ) {
int s = 0;
for( long long i = 1; i <= x ; i++ ) {
if( x % i == 0 ) {
s++;
}
}
if( s == 2 ) {
return 1;
}
return 0;
}
Run Code Online (Sandbox Code Playgroud)
int main() {
long long A = 600851475143;
long long i = 2;
long long C = 0;
while( i < (A/2) ) {
while( A % i == 0 ) {
A = A / i;
if( i > C ) {
C = i;
}
}
i++;
}
if( prim(C) ) {
cout<<C;
}
return 0;
}
Run Code Online (Sandbox Code Playgroud)
这是我为Project Euler问题3编写的代码.我不明白为什么当我跑它时,它给了我1471.这是一个很好的答案,但不是最大的.但如果我改变i = 1471它给我正确的答案6857 ...问题出在哪里?为什么它不是"自动地"给我好的6857答案但1471从2开始?
PS.我知道我不必long long到处使用.
你的因子分解算法需要在C和之间进行选择A,因为在进程结束时A包含余数,这也是原始因子A.如果碰巧是最大的那个,你的代码会错过它.
if (A > C) {
C = A;
}
Run Code Online (Sandbox Code Playgroud)
完成此修改后,您的代码将生成正确的答案(演示).
注意:既然您的程序正在运行,您可以考虑进行一些修改:
A/2效率低下; 你可以停在平方根(你明白为什么?)| 归档时间: |
|
| 查看次数: |
209 次 |
| 最近记录: |