我正在编写一个 cpp 程序来打印两个数字之间的所有质数。程序 运行 成功,但未打印任何内容

i'm writing a cpp program to print all prime numbers between two numbers . Program is running successfully but it is not printing anything

#include <iostream>
using namespace std;
bool isPrime(int num){
    for(int i=2;i<=num;i++){
        if(num%i==0){
            return false;
        }
    }
    return true;
}
int main()
{
    int a,b;
    cin>>a>>b;
    for(int i=a;i<=b;i++){
        if(isPrime(i)){
            cout<<i;
        }
    }
    return 0;
}

请告诉我我的错误,程序 运行 成功但没有打印任何东西。

问题是您正在检查从 2num 的所有除数,包括在内。由于每个正整数都会自除,因此您找不到任何素数。最小的修复是更改循环退出条件以排除 num:

    for(int i=2;i<num;i++)

请注意,这会起作用,但效率很低。这是一个更快的版本。此版本也拒绝任何小于 2 的值,因为 0 和 1 不是质数:

bool isPrime(int num){
    if (num < 2){
        return false;
    }
    if (num == 2){
        return true;
    }
    if (num % 2 == 0){
        return false;
    }
    for (int i=3; i*i<=num; i+=2){
        if(num%i==0){
            return false;
        }
    }
    return true;
}

此版本对 2 和偶数进行了特殊情况检查。之后,它只检查奇数除数。一旦除数超过 sqrt(num),它就可以停止(当 i*i > num 时循环退出)。

for(int i=2;i

您在 isPrime 函数中使用了 i<=num,其中逻辑应为 i