j = 0放在两个for循环之间,而且注意1不是素数
for(;a <= b;a++){
j = 0;
for(i =2;i < a;i++){
}
}
当发现某个非素数后,j就变成1了,if(j==0)永远不成立,需要在每次判断前(第二个for循环前)把j重新赋值为0
我看你代码里的问题还是蛮多的,直接给你一个可用的版本。
#include <stdio>
#include <math>
// 判断素数
int is_prime_number(int n)
{
if (n < 2)
{
return 0; // 1不是素数
}
else if (n == 2)
{
return 1; // 最小的素数是2,也是唯一的偶素数
}
else
{
for(int i = 2; i*i<=n; i++)
{
if (n % i == 0)
{
return 0;
}
}
return 1;
}
}
int main()
{
int a, b;
scanf("%d %d", &a, &b);
for(int i = a; i<=b; i++)
{
if (is_prime_number(i))
{
printf("%d ", i);
}
}
return 0;
}