在给定间隔内搜索素数时输出错误

Wrong output when searching for prime numbers in given interval

本文关键字:输出 错误 搜索      更新时间:2023-10-16

我试图找到 num1num2 之间的素数,但是如果我的输入是 1,10,则此代码仅产生 1,2,3 作为素数

#include <iostream>
using namespace std;
void prime(int num1, int num2)
{
    bool prime = 1; // prime=1 means the number is prime
    for (num1; num1 <= num2; num1++)
    {
        for (int i = 2; i < num1; i++)
        {
            if (num1 % i == 0)
            {
                prime = 0;
                break;
            }
        }
        if (prime == 0)
        {
            cout << num1 << " Is not Prime" << endl;
        }
        else
        {
            cout << num1 << " Is prime" << endl;
        }
    }
}
int main()
{
    int num1, num2;
    cout << "Enter 2 numbers to check the prime numbers between them:";
    cin >> num1 >> num2;
    prime(num1, num2);
}

在开始循环候选素数之前,您只设置prime=1一次。因此,一旦你点击一个不是素数的数字(在你的例子中,4),你就会得到prime=0,之后它再也不会被设置为1。

第二个 for 应该从 3 到 (int)sqrt((double)num2),步骤为 i+=2

你忘了将布尔素数重置为 true。

试试这个....

#include <iostream>
using namespace std;
void prime(int num1, int num2)
{
    for (num1; num1 <= num2; num1++)
    {    
        bool prime = 1; // prime=1 means the number is prime
        for (int i = 2; i < num1; i++)
        {
            if (num1 % i == 0)
            {
                prime = 0;
                break;
            }
        }
        if (prime == 0)
            cout << num1 << " Is not Prime" << endl;
        else
            cout << num1 << " Is prime" << endl;
    }
}
int main()
{
    int num1, num2;
    cout << "Enter 2 numbers to check the prime numbers between them:";
    cin >> num1 >> num2;
    prime(num1, num2);
}