输出100-200间的素数三种方法

程序分析:

  1. 1.首先我们我们需要产生100-200之间的数,这个用for循环实现,然后我们需要判断100-200之间的数有哪些是素数,这也需要用到for循环,所以是双层for循环结构,外层for循环用于控制打印100-200的数,内层for循环用于控制判断素数;
  2. 我们需要明白什么是素数:
    所谓的素数就是只能被1和它本身的数字整除
  3. 怎么判断一个数是不是素数呢?
    我们有一个数,假设是i,用2到i-1的数去试除i,如果能够被整除,就不是素数,不能够被整除,就是素数;
  4. 实现这个程序有几个关键点:
    需要定义一个flag变量,以及用到了break语句,让flag=1,先假设它是素数,进入到了第二层循环后,我们用if语句进行判断,如果能够被整除,就不是素数,那么我们也没有必要再进行判断了,因此我们需要跳出第二层for循环,用break语句,此时我们让flag=0,就代表不是素数,然后再进行判断,如果flag=1,那么我们就打印这个素数,然后再回到第一层循环,依次往下执行。
  5. 实现这个程序有三种方法,一种比一种优化,大家可以根据需要自己选择。

第一种方法:

#include <stdio.h>
int main()
{

int i=0;
for(i=100;i<=200;i++)
{
int j;  //j代表被除数,i代表除数
int flag=1;     //注意定义这个flag变量时它的位置,不要放在了for循环外面去了


 for(j=2;j<=i-1;j++)
{

if(i%j==0)
    {
    flag=0;
    break;  //跳出第二层for循环
    }
}

if(flag==1)
    { 
        printf("%d\n",i);
    }
}
return 0;
}

第二种方法: 

第二种方法跟上一个方法比,优化了,有一个知识点是在所有的质数中,除了2是偶数,没有偶数是质数,也就是说都是奇数,那么我们就可以从101开始判断,然后每次加2,这就减小了计算量

#include <stdio.h>
int main()
{
  int i=0;
  int count=0; //用于统计素数个数
  for(i=101;i<=200;i+=2)
{
   int j;
   int flag=1;
for(j=2;j<=i-1;j++)
    {
      if(i%j==0)
      {flag=0;
        break;
       }

    }
   
if(flag)
{
printf("%d\n",i);
count++;

}
}

printf("\n素数的个数为%d\n",count);






return 0;
}

第三种方法:
利用一个数学知识点,假设a*b=c,a和b都是因子,a和b一定都小于等于根号c,

比如4*4=16,2*8=16,那么2<=根号16,也就是说所有的因子也就是能够被整除的数一定都小于等于这个被除数开平方后的值;那么我们就不用拿2到i-1的数去试除了,

#include <stdio.h>
#include <math.h>
int main()
{
int i;  //i是被除数
int count=0;   //count是统计素数个数
for(i=101;i<=200;i+=2)  //来到第一层for循环,打印100-200的数
{

int j;  //j是因子
int flag=1;  //假设flag=1的情况是素数,那么下面判断不是素数后,就让flag=0

//第二层for循环,判断是否为素数

for(j=2;j<=sqrt(i);j++)
   //j一定小于等于根号i, 求平方根sqrt这个函数需要用到math这个文件
{
  if(i%j==0)
{
   flag=0;
   break;
}
}

//只打印素数
if(flag)
{
printf("%d\n",i);

}
}
//所有的循环结束了打印素数个数
printf("\n素数的个数是%d\n",count);
return 0;
}
  • 5
    点赞
  • 5
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值