该程序将查找最大数为600851475143的素数因子。对于任何给定不小于max_int的给定数,它均适用。
我在代码块中运行代码。
#include<iostream>
using namespace std;
int main()
{
unsigned long long a =600851475143 ,prime=2,i,j;
for(i = 1;i < a/2;i++) {
int count =1;
if( (a%i)==0) {
for( j = 2;j <=(i/2);j++)
if(i%j==0)
count = 0;
if(count == 1)
prime = i;
}
}
cout<<prime;
}
预期结果是最大的主要因素600851475143 但是输出什么也没有,只是空白屏幕
答案 0 :(得分:1)
我认为您会发生时间溢出,您至少要执行600851475143/2次操作,考虑到这100万,实际上很多。的操作大约在0.1秒内执行; 您可以通过不使用a / 2而是使用sqrt(a)来对其进行优化,更多有关此处的原因(https://en.wikipedia.org/wiki/Primality_test)
#include<iostream>
using namespace std;
int main(){
unsigned long long a = 600851475143 ,prime = 2,i,j;
for(i = 1; i*i < a; i++){
int count = 1;
if((a%i) == 0){
//check if i is prime
for(j = 2; j*j <= i && count;j++)
if(i%j == 0)
count = 0;
if(count == 1){
prime = max(prime,i);
}
//check if a/i is prime
count = 1;
for(j = 2; j*j <= a/i && count;j++)
if(a/i%j == 0)
count = 0;
if(count == 1){
prime = max(prime, a/i);
}
}
}
cout << prime;
}
现在我们大约有100万。首先执行的操作数。
另外,最好检查a / i是否也为质数,因为数字为coul