我正在编写一个 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;
}
请告诉我我的错误,程序 运行 成功但没有打印任何东西。
问题是您正在检查从 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
您在 isPrime 函数中使用了 i<=num,其中逻辑应为 i
#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 您在 isPrime 函数中使用了 i<=num,其中逻辑应为 i