使用c++查找整数的原数

Finding the primality of an integer using C++

本文关键字:整数 c++ 查找 使用      更新时间:2023-10-16

编写一个c++算法来测试一个素数。我的c++代码如下

#include<iostream>
#include<cmath>
using namespace std;
int x,n;
bool isprime(int);
int main()
{
    cout<<"Enter prime no"<<endl;
    cin>>x;
    for (n=2;n<=floor(sqrt(x));n++)
    {
        if (x==1)
            cout<<"not prime"<<endl;
        else if (x%n==0)
            cout<<"is not prime"<<endl;
        else
            cout<<"prime"<<endl;
    }
}

但是当我运行程序时,我的输出似乎不正确,例如,当答案显然不是素数时,我一直得到"是素数"。

else if (x%n==0)
cout<<"is not prime"<<endl;
语句的

部分似乎无法正确执行。谁能解释给我什么是错误的我的代码。由于

你的循环对x的每个非质数输出"prime" .你应该在第一个"not prime"命中后终止循环,如果循环没有终止,只输出"prime"。

正如Udo Klein所建议的,当检测到该数不是素数时,应该跳出循环。也不需要检查x在循环内是否等于1。

#include<iostream>
#include<cmath>
int main()
{
    int x;
    std::cout << "Enter prime no" << std::endl;
    std::cin >> x;
    if (x == 1)
    {
        std::cout << "not prime" << std::endl;
        return 1;
    }
    for (int n = 2; n <= floor(sqrt(x)); n++)
    {
        if (x % n == 0)
        {
            std::cout << "is not prime" << std::endl;
            return 1;
        }
    }
    std::cout << "prime" << std::endl;
    return 0;
}