Warning: file_get_contents(/data/phpspider/zhask/data//catemap/8/selenium/4.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
C++ 为什么编写的代码在执行时有溢出错误_C++ - Fatal编程技术网

C++ 为什么编写的代码在执行时有溢出错误

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( (

该程序将查找数字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( (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;
}