错误:用于查找一个数字是否为素数的代码,该代码仅在47之前有效 < P>我写了一个C++代码,用于查找给定的数是否为素数,OT一直工作到47,但输出的输出数为NO,而不是素数大于47的素数。请帮助。 #include<iostream> using namespace std; int main() { int x,t,z=2,y=1; cout<<"Enter the number: "; cin>>x; while (z<x ) { t=x%z; z++; y=t*y; } if(y==0) cout<<"NO"; else cout<<"prime"; return 0; }

错误:用于查找一个数字是否为素数的代码,该代码仅在47之前有效 < P>我写了一个C++代码,用于查找给定的数是否为素数,OT一直工作到47,但输出的输出数为NO,而不是素数大于47的素数。请帮助。 #include<iostream> using namespace std; int main() { int x,t,z=2,y=1; cout<<"Enter the number: "; cin>>x; while (z<x ) { t=x%z; z++; y=t*y; } if(y==0) cout<<"NO"; else cout<<"prime"; return 0; },c++,C++,您的计算很快导致整数溢出。因为素数除了1和它本身之外没有除数,所以对于素数,t=x%z将一直是z。因此,对于素数的任何x,都可以有效地计算z-1的阶乘,在溢出之前,它可以工作10次迭代 这里不需要任何乘法运算,一旦找到一个x%z==0的z,就可以打印No并返回 示例代码段: while (z < x) { if(t % z == 0) { std::cout << "No"; return 0; } z++; } st

您的计算很快导致整数溢出。因为素数除了1和它本身之外没有除数,所以对于素数,t=x%z将一直是z。因此,对于素数的任何x,都可以有效地计算z-1的阶乘,在溢出之前,它可以工作10次迭代

这里不需要任何乘法运算,一旦找到一个x%z==0的z,就可以打印No并返回

示例代码段:

while (z < x)
{
    if(t % z == 0) {
        std::cout << "No";
        return 0;
    }

    z++;
}

std::cout<<"prime";

正确地格式化它,正确地调试它。y=t*y看起来它可能会很快溢出。也许你可以用bool来代替。如果你每次迭代都打印t,你可以看到你得到了一个整数溢出。为什么不使用一个简单的bool和if/else来表示是否找到除数呢?乘法欺骗的目的是什么?