C语言:查找打印质数(素数)

这个题是很灵活的,有几种解法,也有很多种优化方法,这里,我来谈谈一种个人感觉比较容易理解的方法。

首先,要知道质数(素数)是什么?

质数(素数)是除了1和它本身,不能再被其他数整除的数。

那么,知道这个后,就可以来编程了。

先打印出100-200中的质数(素数)

100到200当然不可能是一个一个打出来了,必定要使用循环弄出100-200,比如:

然后,就看看100-200中的某个数符不符合除了1和它本身,不能再被其他数整除,我们就可以从2开始,看能不能被2整除,如果不能,则变成3、4、5……直到除到他本身-1,如果都不能整除,那么,就可以打印出这个数。过程如下图:

这时候会发现,我们定义了一个新的变量--add,为什么要定义这个变量呢?

原因是这个变量可以在不满足条件的时候变成0;在满足条件的情况,则会保持原来的数值不变,然后就可以打印出来。最值得注意的是,这个变量 add 是不能放在全局变量位置的,它是一定要放在第一个循环的局部变量中的,这样才能使每次循环过后,都恢复成原来所定义的数值,避免代码运行结果不符合自己的预期。

整理过后,就可以得到完整的打印100-200中的质数(素数)的代码,见下:

 

最后,也是每个项目都要的推广环节,在此之前,我们要先来对这个代码进行优化一下,

 

在这一行中,i 从2一直加到 num -1,数字小还好,如果使庞大的数字的话,整个工程运行起来的速度会变慢不少,所以,我们可以把代码优化成这样:

 

因为在根号下 num 之前都没能找到有一个数能被 num 整除的话,那么,在根号下 num 之后,也一定不会存在有一个数能够被 num 整除。

推广:可以让其在打印质数(素数)时,不受范围限制(如上面代码,只能打印100-200之间的),而是能够按照自己的意愿来打印这些质数(素数)。

最后的代码为:

 

猜你喜欢

转载自blog.csdn.net/Faith_cxz/article/details/121057324