C++ 为什么编写的代码在执行时有溢出错误
该程序将查找数字600851475143中的最大素数因子。对于任何小于最大整数的给定no,它都能完美地工作 Iam在代码块中运行代码C++ 为什么编写的代码在执行时有溢出错误,c++,C++,该程序将查找数字600851475143中的最大素数因子。对于任何小于最大整数的给定no,它都能完美地工作 Iam在代码块中运行代码 #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( (
#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;
}
#包括
使用名称空间std;
int main()
{
无符号长a=600851475143,素数=2,i,j;
对于(i=1;i对于(j=2;j我认为你得到了一个时间溢出,你正在做的操作最少为600851475143/2,考虑到大约在0.1秒内执行了1 mil.的操作,这实际上是一个很大的数目;
您可以通过转到sqrt(a)而不是a/2来稍微优化它,更多关于为什么在这里()
#包括
使用名称空间std;
int main(){
无符号长a=600851475143,素数=2,i,j;
对于(i=1;i*i对于(j=2;j*j那么在调试代码时您看到了什么?始终使用大括号({}
)对于任何流控制块。您应该格式化和调试代码以查找问题。欢迎使用堆栈溢出!请阅读。关于您的问题类型,您需要在询问之前提取a,以清除不好的问题并自己查找简单故障。声明“…对于小于max_int的任何给定数字,它都能完美工作”是不正确的。
#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;
}