// 素数问题。输入两个正整数m和n(1<=m<=n<=500)
//输出m和n之间的全部素数,每行输出10个。
//使用嵌套循环解决该问题
#include<stdio.h>
#include<math.h>
int main(void)
{
int n,m,i,k;
int flag;
int limit; //flag用来判断时是否为素数
int count = 0;
printf("Enter m and n:");
scanf("%d%d",&m,&n);
if(m<1||n>500||m>n){
printf("Invalid!\n");
}else{
for(k=m;k<=n;k++){
if(k<=1){
flag=0;
}else if(k==2){
flag=1;
} else{
flag=1; //先假设k是素数
limit=sqrt(k)+1;
for (i=2;i<=limit;i++){
if(k%i==0){ //若k能被某个i整除,则k不是素数
flag=0; //置flag为0
break;
}
}
}
if(flag==1){
printf("%6d",k);
count++;
if(count%10==0){
printf("\n");
}
}
}
}
return 0;
}
测试用例:Enter m and n:1 50
2 3 5 7 11 13 17 19 23 29
31 37 41 43 47
这个问题与判断素数问题相反,判断素数是判断数m在[2,m]之间能否被整除。而此题则是先假设其是素数,引用flag进行判断,置flag为1,若k能被[2,
limit]中的某个数整除,则说明k不是素数,将flag改为0;这样,在内层循环结束后,flag的值表示k是否为素数。