#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;
}
请告诉我我的错误,程序运行成功但没有打印任何内容。
问题是您正在检查从
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
时循环退出)。
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;
}