c语言素数算法有多少

这属于算法上的问题好好考虑┅下算法,还要考虑一下素数的定义 

素数是只有1和本身能整除的整数。所以在求素数的时候要将素数与1到素数本身中间的所有整数都楿除,看是否有整除的数如果有,那肯定不是素数了但是从算法上考虑,为了减少重复量开平方后面的数就不用相除了,因为a/b(平方数)=c(小一点的数)同样a/c=b。举例说明: 25开平方以后是5,那么整除2~5就可以了,如果有满足条件的就是素数。 这样做可以减少循环次数素数是因子为1和本身, 如果数c不是素数则还有其他因子,其中的因子假如为a,b.其中必有一个大于sqrt(c) ,一个小于sqrt(c) 所以m必有一个小于或等於其的因数,那么验证素数时就只需要验证到其平方根就可以了即一个合数一定含有小于它平方根的质因子。

按定义应该用2-23去除但經过分析上面的数可以发现 1×24、2×12、3×8、4×6 如果2、3、4是某个数的因数,那么另外几个数也是反之也一样 所以为提高效率,可以只检查小於该数平方根的那些数如24的平方根大于4小于5,检查2-4就可以了! 

例如:问题:令Pi表示第i个素数现任给两个正整数M <= N <= 10000,请输出PM到PN的所有素數

红色部分为应用sqrt方法快速判断是否为素数,防止超时:

参考资料