【发布时间】:2011-11-18 02:04:46
【问题描述】:
在开始之前,我想澄清一下,我不是寻找代码示例来获得答案;这将击败欧拉计划的对象。
问题可以在这里找到http://projecteuler.net/problem=3
我想我有办法解决这个问题,但是算法很慢;它已经运行了将近两个半小时。所以我正在寻找关于优化的一般建议。
谢谢。
#include<iostream>
using namespace std;
bool primality(int);
int main(){
long long lim = 600851475143;
long long div = lim/2;
bool run = true;
while(run){
if(lim%div==0 && primality(div)){
cout << "HPF: " << div;
run = false;
}
else{
div--;
}
if(div<=1){
break;
}
}
return 0;
}
bool primality(int num){
for(int i=2; i<num; i++){
if(num%i==0 && i!=num){
return false;
}
else{
return true;
}
}
}
【问题讨论】:
-
研究Erosthanes的筛子。您查看的值过多。
-
感谢您的提示。我正要读一读。
-
您的素数函数对于大于 2 的每个奇数返回 true。对于每个 2 及以下的数字,它什么也不返回。
-
为了优化 this 代码:在
primality中,您可以将num除以二,就像在main中一样。 -
primality 仅适用于 int,但您将 long long 传递给它,这不起作用
标签: c++