- 99
- 0
- 约3.72千字
- 约 5页
- 2018-05-22 发布于河南
- 举报
C语言求质数
试编写一个程序,找出2-N之间的所有质数。希望用尽可能快的方法实现。【问题分析】: 这个问题可以有两种解法:一种是用“筛子法”,另一种是从2-N检查,找出质数。 先来简单介绍一下“筛法”,求2~20的质数,它的做法是先把2~20这些数一字排开: 2?3?4?5?6?7?8?9?10?11?12?13?14?15?16?17?18?19?20 先取出数组中最小的数,是2,则判断2是质数,把后面2的倍数全部删掉。 2?|?3 5?7?9?11?13?15?17?19 接下来的最小数是3,取出,再删掉3的倍数 2?3?|?5?7?11?13?17?19 一直这样下去,直到结束。 筛法求质数的问题时,非质数的数据有很多是重复的。例如,如果有一个数3×7×17×23,那么在删除3的倍数时会删到它,删7、17、23时同样也会删到它。有一种“线性筛法”,可以安排删除的次序,使得每一个非质数都只被删除一次。从而提高效率。因为“筛法”不是我要介绍的重点,所以就不介绍了。 现在我来介绍第二种方法。用这种方法,最先想到的就是让从2~N逐一检查。如果是就显示出来,如果不是,就检查下一个。这是正确的做法,但效率却不高。当然,2是质数,那么2的倍数就不是质数,如果令i从2到N,就很冤枉地测试了4、6、8……这些数?所以第一点
原创力文档

文档评论(0)