首页 > 解决方案 > 错误:查找数字是否为素数的代码仅在 47 之前有效

问题描述

我编写了一个 C++ 代码来查找给定数字是否为素数,直到 47 为止都可以正常工作,但是对于大于 47 的素数,输出为 NO(不是素数)。请帮忙。

#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++

解决方案


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

一旦找到可以打印“否”并返回的z位置,您就不需要在这里进行任何乘法运算。x % z == 0

示例片段:

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

    z++;
}

std::cout<<"prime";

推荐阅读