a定义在哪里都可以。重点是a需要内层for循环开始前,或者结束后,将a恢复为1。因为a的作用是标志外层循环当前判断的x是否为素数。当内层循环判定不是素数时,会将该标志改为0。从而在内层循环结束时,通过该标志确认x是否为素数。在进行下一个x的判断时,该标志需要重新恢复为1,否则永远是0,就没有办法再判断后面的x是否为素数了。
不知道解释清楚了没有
a定义在第一个for后面是为了做标记,如果有能整除的a就会等于0,最后判断不是0才输出素数
你的if语句应该放在内部for循环结束后,否则输出不对
给你改好了:
#include <stdio.h>
int main()
{
int n, i, a = 0,x;
scanf("%d",&n);
for(x=2;x<n;x++){
a=0;
for(i=2; i<x; i++)
{
// 符合该条件不是素数
if(x%i==0)
{
a=1;
break;
}
}
if (a==0)
printf("%d ",x);
}
return 0;
}