[循环]素数
原题
思路解析:
素数是除了1和其本身外无其他约数的数。
二重循环:外循环:用i表示区间[m,n]上的数
内循环:用j判断i是否为素数
AC代码:
方法一:在循环内赋初值的标志旗帜法
#include <stdio.h>
int main()
{
int m,n,i,j;
int flag; //用旗帜代表是不是素数
scanf("%d%d",&m,&n);
for(i=m;i<=n;i++) //外循环控制表示i是区间[m,n]上的数
{
flag=1; //用1首先认为是素数 注意:flag=1要放在循环中,而不是放在循环外,如果放到循环外,内循环一次后,flag=0, 再到外循环flag就一直为0了。flag=1也是为了配合下面
for(j=2;j<i;j++) //看i除了1和其本身外还有无其它约数
if(i%j==0) //说明j是i的约数,i不是素数
{
flag=0;
break; //不加break也可以。不加会多循环判断几次,增加运行时间
}
if(flag==1)
printf("%d ",i); //注意输出格式要与题目相对应
}
return 0;
}
方法二:在循环外赋初值的标志旗帜法
#include <stdio.h>
int main()
{
int m,n,i,j;
int flag=1; //此时的旗帜在循环外
scanf("%d%d",&m,&n);
for(i=m;i<=n;i++)
{
for(j=2;j<i;j++)
{
if(i%j==0)
{
flag=0;
break;
}
else //否则flag=1代表是素数
flag=1;
}
if(flag) //即flag==1
printf("%d ",i);
}
return 0;
}
方法三:无旗帜标志
#include <stdio.h>
int main()
{
int m,n,i,j;
scanf("%d%d",&m,&n);
for(i=m;i<=n;i++)
{
for(j=2;j<i;j++)
{
if(i%j==0)
break;
}
if(j==i) //说明i的约数为其本身,即i为素数
printf("%d ",i);
}
return 0;
}