Junie's Blog

质数判定方法

全文共 170预计阅读 1 分钟

原理:

质数的分布具有特点,经过证明可以得到,大于等于 55 的质数一定和 66 的倍数相邻,一定是 6x16x-16x+16x+1 。利用这种特性。可以对整数进行筛选,只判断那些是 6x16x-16x+16x+1 的整数是否为质数。

证明过程如下:

x1x≥1 ,将大于等于 55 的自然数表示如下: ······6x16x6x+16x+26x+36x+46x-1,6x,6x+1,6x+2,6x+3,6x+4 ······(相邻 66 个数为一组)

在以上的数字中,6x6x+26x、6x+26x+46x+4 是偶数,一定不是质数; 6x+36x+3 可以分解为 3(2x+1)3(2x+1) ,不是质数,因此质数只能是 6x16x-16x+16x+1

代码:

bool isPrime(int n)
{
    if (n <= 3) return n >= 2;
    if (n % 6 != 1 && n % 6 != 5) return false;
    for (int i = 5; i <= n / i; i += 6)
    {
        if (n % i == 0 || n % (i + 2) == 0) return false;
    }
    return true;
}

评论