利用孪生素数判断素数

思路参见:http://blog.csdn.net/code_pang/article/details/7880245

孪生素数: 所谓孪生素数指的是间隔为 2 的相邻素数。

大于6以上的孪生素数,
P-1和P+1为素数,则P-1和P+1一定为奇数,则P一定为偶数,即P为2的倍数!
P-1、P、P+1为连续的自然数,他们一定有一个是3的倍数,P-1和P+1为素数,则他们不为3的倍数,即P也为3的倍数!
所以P一定为2和3的最小公倍数即6的倍数!

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的两侧。

判断代码如下:

bool isPrime(int num)
{
    if(num==1)return false; //注意特判1,2,3
    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;
}

仅代表个人观点,欢迎交流探讨,勿喷~~~
这里写图片描述

PhotoBy:WLOP

http://weibo.com/wlop

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值