欣野吧 关注:51贴子:6,200
  • 2回复贴,共1

判断素数的问题

只看楼主收藏回复

如果一个数n是合数,则可写为n=p*q*……,项数越多则质因数整体越小。
设p为n的最小质因数,则2<=p<=sqrt(n).
用反证法,设p>sqrt(n),因为 n/p 也是 n 的因子(不一定是质因子),令q=n/p, 由假设p是n最小的质因子,而q 至少包含n的一个因子,故q>=p。
即 n=pq>=p*p>sqrt(n)*sqrt(n)=n, 此式矛盾,故假设不成立,即 p<=sqrt(n).
即合数n的最小质因子不大于sqrt(n),它的逆否命题就是:
如果数n在[2,sqrt(n)]之间没有质因子则n为质数


IP属地:吉林1楼2012-12-02 10:13回复
     素数即只能被1和其本身整除的数,判断n是否为素数只需用2~n/2之间的数去除就可以了。因为一个数的一半的平方大于其本身是从5开始的,解方程:n/2的平方>n 。即一个数n的两个因数不能同时比n/2大。就可以说一个数若不是素数则一定在2~n/2之间有因数。而且2,3也是符合下面程序的。


    IP属地:吉林2楼2012-12-02 10:38
    回复
       其实可以简化,m不必被2~m-1之间的每一个整数去除,只需被2~根号m之间的每个数去除就可以了。例如判别17是否为素数,只需使2~4之间的每一个整数去除。为什么可以做如此简化呢?因为如果m能被2~m-1之间任意整数整除,如果这个数大于根号m,那这个数必定对应的还有一个比根号m小的因子(以16为例,2、8是它的因子,8大于4,2小于4)。


      IP属地:吉林3楼2012-12-02 10:39
      回复