C语言中的素数问题为什么求到根号某数为止

来源:百度知道 编辑:UC知道 时间:2024/06/08 17:45:20

我今天也刚问了一个素数的问题。
例如一个数是M,要求它的素数,设K=sqrt(m),i=2,i<=k ,判定是否(m%i==0),
因为整数都是可以被1和自己本身整除,而素数只能给1和自己本身除。
所以我要找素数都是从2开始一个一个的找,在2<i<m里找,也是从2开始加1加1的找。那我们来分解一个数,看他能被什么数整除,例如27=3*3*3 那27%sqrt(27)==0,那么我们只从2找到3就可以了,也是说的9都是3分解出来的,sqrt(27)要对应前面的整型数所以也是当成3的。
这样编的意思就是找一个数的最小因子。且这个比if(i==m)程序的速度更快。

是否是素数是用比它小的数去除它看能否出尽来判断的,而如果能出尽的话那么除数是成对存在的,比如22=2*11,2和11就是一对,而这一对只要判断一个就可以了,因此这种除数判断的下界为2,而上界为被除数开根号。

举例说明:
1. 90 = 2 * 3 * 3 * 5 (90的质因式中最大的质因数是5,小于90的平方根)
2. 49 = 7 * 7 (49 的质因式中最大的质因数是7,等于49的平方根)
总之,任意一个数的最大的质因数都小于或等于这个数的平方根。
所以,求素数时求到这个数的平方根即可,这样可以程序提高程序效率。

因为根号某数是可被整除无重复的数最大那个(除了本身以为),被625整除的数最大的也就是25,再大的被整除的因数中另一个肯定是2到25中某个数,因此无需继续判断。比如5,和125无需判断125。