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

问题描述 投票:0回答:3
#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;
}

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

c++ namespaces primes iostream
3个回答
3
投票

问题是您正在检查从

2
num
(包含)的所有除数。由于每个正整数都会整除自己,因此您找不到任何素数。最小的修复方法是更改循环退出条件以排除
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
时循环退出)。


0
投票

for(int i=2;i

你用过我<=num where the logic should be i

bool isPrime(int num){

      if(num<2){
          return false; 
       }
          else {
                  int x = num/2;
                   for(int i=2;i<=x;i++){
                     if(num%i==0){
                     return false;
                     }
                     }
                     }
            return true;

}


0
投票
© www.soinside.com 2019 - 2024. All rights reserved.