用循环求a以内的素数以及求前a个素数(傻瓜式教学)

          关于求前a个素数,首先要知道什么是素数,就是只能被1,和自己本身整除的数。用循环写的话。基本思路是这样的。首先你要想一个判断一个数是不是素数的代码。最简单的思路就是让这个数(这里设为x),把比他小的数都取余一遍,若为0则不是素数。如下图:

                这里的为什么要设一个变量c,以及为什么要加break不知道的程序猿可以听我细细道来(既然都来看怎么求素数了,估计你就是不明白的那个)。

               首先设置变量c是一种叫做开关的技巧,一般搭配if语句使用。使用方法是先使其值为1,如果有不符合条件的条件则使其值为0,就像上图中的if语句一样,如果x%i=0,那么就表明那个数不是素数,有什么用呢?一般可以用到下一个条件语句中当作一个条件(先忽略注释部分即蓝色部分)

 

               如果c=1我们就输出这个x,而我们之前做了如果一个数不是素数就让c的值为0,所以这里输出的x就都是素数。

解决第二个问题那个break有什么用? 仔细看第一图的循环条件,是i<x。也就是只要i不大于等于x,循环就一直继续。但这会产生一个问题,比如如果令x=8,那么他就会从2除到7,但是我们发现,8%2的值已经是零了,但它仍然会继续循环,因为i仍然小于x嘛。虽然最后仍然可以是c的值等于0,仍然可以判断8不是素数。但这会浪费一些时间,奔着能省则省原则,我推荐加个break。

                好了,我们现在已经可以判断一个数是不是素数了。那么判断a以内的素数。只要从1到a都判断一遍就可以了(这里认为1是素数)。所以我们还需要在外面套个循环,让x从2到a都判断一遍。

 

      黄色部分就是我们在外面套的循环,它可以让x从1走到a。我们现在来试一下效果。比如求100以内的素数,那么我们让a等于100。

        成功了,感觉很成功对不对。但是如果是1000000(一个很大的数)那么我们只用一行是不是太长了。如果我们想要五个素数占一行应该怎么做呢?

       这时候我们就需要一个计数器了,就是图中被注释掉的部分,在循环开始之前我们设个变量等于零,比如上图中的b,然后如果找到一个素数我们就让b++如上图中的第18行。然后我们让b%5如果等于0,那么就说明素数够五个了,该换行了。所以我加一个输出语句输出一个\n使其实现换行操作。现在我们把注释部分回复功能再试一下。

        嗯,有所改善,但我们发现这些数字的上下行 只有两位数的和两位的数对齐了,第行并没有与他们对齐。怎么办呢。只需要在第19行的输出语句加一个\t。

           让我们再试一下 。

     嗯,完美。

     如果你上面的听懂了,那么接下来找前a个素数就简单许多。

     找前a个素数最大的疑问也就是和找a以内的素数最大的不同在于我们并不知道第a个素数是什么。也就是说,我们应该让x从2走到几呢?不好,我们找不到第一个循环的循环条件了!那么我们该怎么办了。

  回想一下我刚刚讲了用计数器去换行对不对,那么计数器只有这一个作用吗?显然不是。我刚刚说计数器就是当找到一个素数x时,计数器b就加一,那么当我们找到第a个素数时,此时计数器b也正好等于a,所以我们只要把第一个循环的条件x<a,改为b <a就好了,当找够a个素数循环停止。然后把找到的x都输出来就ok啦。我们来改一下代码

让我们试一下找前50个素数,即让a等于50。

大功告成。 

 

 

 

 

 

 

  • 3
    点赞
  • 1
    收藏
    觉得还不错? 一键收藏
  • 1
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值