• 高效判断素数方法


    孪生素数: 所谓孪生素数指的是间隔为 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
    极简,专注,速度,极致
  • 相关阅读:
    javascript实现网页分享至朋友圈功能
    Vue中全局过滤器期与局部过滤器期的使用
    vue中添加与删除,关键字搜索
    vue生命周期
    4种常用的Ajax请求方式
    CSS 基础总结
    BEM思想之彻底弄清BEM语法
    学习前端过程中用到的资料
    深入理解,函数声明、函数表达式、匿名函数、立即执行函数、window.onload的区别.
    html基础
  • 原文地址:https://www.cnblogs.com/simplelifestyle/p/3761895.html
Copyright © 2020-2023  润新知