请问c语言为什么这个素数里没有2?

题目:将100~200之间的素数输出

1、首先,我们要意识到,找出某个区间内符合条件的数,就需要对这个区间内的所有数进行遍历,而最常用的遍历方法就是利用for循环;

2、其次,在确定了遍历区间后,就要根据符合条件的数来进行条件限定。例如本题中要求的是找到区间内的所有素数,那么我们首先就要明确素数的概念:一个大于1的自然数,且除了1和它本身外,不能被其他自然数整除的数叫素数;

3、然后,我们便需要思考如何用数学关系式来清楚地表达素数。根据素数的概念,当一个数除以在这个区间内所有不是1且不是其本身的数时:若其余数是0,就代表可以被整除,也就是说其还有其他因数,所以在此区间内此数就不是素数;若其余数不是0,那么这个数在这个区间内便是素数;

4、基本的思路理清楚以后,我们就要和计算机进行交流,把我们大脑中的逻辑语言转化为计算机可以看懂的语言:

①定义两个int变量:i,j,分别作为除数和被除数

②最外层定义一个for循环,确定被除数的范围区间100~200

③下面再嵌套一层for循环,确定除数的区间,因为是除了1和其本身以外的数,所以j应该从2开始,结束区间由i为上限

④写一个if判断语句,利用取余公式i%j来确定其余数是否为0:若为0,就说明i可以整除j,则退出循环

⑤通过以上方式,便会排除④中不是素数的数,那么剩下的数便是素数

1、熟悉遍历方式,确定初始值和遍历范围;
2、具体问题具体分析,牢记素数的判别表达式;
3、理解break的含义,以及其和continue的区别。

}

分别判断m=除以i = 2,3,4,5,6,...,24(=m-1)后,能不能除尽(余数为0,m%i=0)。如果有能除尽的,m就不是素数; 如果都不能除尽,m就是素数。这样判断也可以,但有点浪费!

5*5=25,去掉大于5的判断。只判断2到5就可以了。去掉大于5的数有点武断?那是为什么哪?

你说可能m/(k+2)可能除尽?

由在上边已经证明了的m/(k+1)除不尽,

则上式中第二项是真分数,m/(k+2)也除不尽。

(2)如果m/sqrt(m)能除尽,就证明m不是素数了,break。以下是画蛇添足了。

证明m/(k+2)也除不尽与(1)一样。略。

}

我要回帖

更多关于 c语言求素数算法 的文章

更多推荐

版权声明:文章内容来源于网络,版权归原作者所有,如有侵权请点击这里与我们联系,我们将及时删除。

点击添加站长微信