题目:打印100~200之间所有的素数
素数:除了1和它本身以外,没有其他因子
方法:第一层for 循环限制100~200之间的数;第二层for循环遍历因子;
判断一旦能被因子整除,就不是素数,break跳出循环,
当将因子遍历完,都没有找到能被整除的,则为素数,打印即可,如下
#include<stdio.h>
int main()
{
int i ,j;
for(i=100;i<201;i++){
for(j=2;j<i;j++){
if(i%j==0){
break;//若有一个能被整除,就不是素数,直接跳出
}
}
if(i==j){
printf("%d ",i);//跳出第二次for循环有两种情况:1.遇到brreak 2.i没有遇见能被整除的j,则i就为素数
}
}
return 0;
}
结果如下:
还可以用立flag的方法:
#include<stdio.h>
int main()
{
int i,j,flag;
for(i=100;i<201;i++){
flag=1;//假设i时素数
for(j=2;j<i;j++){
if(i%j==0){
flag=0;//不是素数
break;
}
}
if(flag==1){
printf("%d ",i);
}
}
return 0;
}
上述代码还可以简化:
1.因子遍历不用从2到i,只用从2到根号i,减少循环次数,用根号时,要用数学函数据库,头文件
为#include<math.h>
2.数的循环范围不用从100~200一个一个遍历,可以考虑到偶数一定不是素数,则从数101开始,每次增加2,优化后的代码如下
#include<stdio.h>
#include<math.h>
int main()
{
int i,j,flag;
for(i=100;i<201;i++){
flag=1;
for(j=2;j<sqrt(i)+1;j++){
if(i%j==0){
flag=0;
break;
}
}
if(flag==1){
printf("%d ",i);
}
}
return 0;
}