zoukankan      html  css  js  c++  java
  • 高效判断素数方法

    孪生素数: 所谓孪生素数指的是间隔为 2 的相邻素数,它们之间的距离已经近得不能再近了。
    
    若n≥6且n-1和n+1为孪生素数,那么n一定是6的倍数。
    证明:
    ∵ n-1和n+1是素数 ┈┈┈┈┈ ①
    ∴ n-1和n+1是奇数
    ∴ n是偶数,即n是2的倍数 ┈┈┈┈┈ ②
    假设n不是3的倍数,得:
    n=3x+1 或 n=3x+2,
    如果n=3x+1,则n-1=3x,与①违背,故n≠3x+1;
    如果n=3x+2,则n+1=3(x+1),与①违背,故n≠3x+2;
    ∴假设不成立,即n是3的倍数,又有②得结论:
    n是6的倍数。
    
    由上面的规律可以推出下面结论:
    若x≧1且n=6x-1或n=6x+1不是素数,那么n一定不是2和3的倍数。
    证明:
    ∵n=6x-1或n=6x+1,即n=2(3x)-1或n=2(3x)+1或n=3(2x)-1或n=3(2x)+1。
    ∴n一定不是2和3的倍数。
    
    素数出现规律:
    当n≧5时,如果n为素数,那么n mod 6 = 1 或 n mod 6 = 5,即n一定出现在6x(x≥1)两侧。
    证明:
    当x≥1时,有如下表示方法:
    ┈┈ 6x,6x+1,6x+2,6x+3,6x+4,6x+5,6(x+1),6(x+1)+1┈┈
    不在6x两侧的数为6x+2,6x+3,6x+4,即2(3x+1),3(2x+1),2(3x+2),它们一定不是素数,所以素数一定出现在6x的两侧。
    
    高效判断一个大于1的数是否为素数:
    [cpp] view plaincopyprint?
    bool isPrime(int num)  
    {  
        if (num == 2 || num == 3)  
        {  
            return true;  
        }  
        if (num % 6 != 1 && num % 6 != 5)  
        {  
            return false;  
        }  
        for (int i = 5; i*i <= num; i += 6)  
        {  
            if (num % i == 0 || num % (i+2) == 0)  
            {  
                return false;  
            }  
        }  
        return true;  
    }  

    from:http://blog.csdn.net/code_pang/article/details/7880245
    极简,专注,速度,极致
  • 相关阅读:
    Python语言程序设计(1)--实例1和基本知识点
    前端学习笔记--函数
    知乎推荐书籍整理
    第六周周总结
    第五周总结
    第四周周总结
    第三周周总结
    第二周总结
    第一周总结
    项目目标
  • 原文地址:https://www.cnblogs.com/simplelifestyle/p/3761895.html
Copyright © 2011-2022 走看看