判断一个数是否为质数

文章介绍了质数的一个特性,即大于等于5的质数必然与6的倍数相邻,即它们的形式为6x+1或6x-1。基于此,可以优化质数判断算法,只检查形如6x±1的整数。文章还提供了C++代码实现,通过只测试这些特定形式的数字来提高效率,同时避免了3和2的倍数,进一步减少了计算量。
摘要由CSDN通过智能技术生成

判断一个数是否为质数

结论:

(大于等于5的)质数一定和6的倍数相邻,即一定是 6 x + 1 6x + 1 6x+1 6 x − 1 , x ∈ Z , x ≥ 1 6x - 1, x \in Z, x \ge 1 6x1,xZ,x1。 利用这种特性,可以对整数进行筛选,只判断那些是 6 x + 1 6x + 1 6x+1 6 x − 1 6x - 1 6x1的整数是否为质数。

证明:

x ≥ 1 x \ge 1 x1, 将大于5的相邻6个的整数分为一组,即每组的整数有: { 6 x − 1 , 6 x , 6 x + 1 , 6 x + 2 , 6 x + 3 , 6 x + 4 } \{6x-1, 6x, 6x + 1, 6x + 2, 6x + 3, 6x + 4\} {6x1,6x,6x+1,6x+2,6x+3,6x+4}, 在每组的整数中, 6 x , 6 x + 2 , 6 x + 4 6x, 6x + 2, 6x + 4 6x,6x+2,6x+4为偶数,一定不为质数,且 6 x + 3 = 3 ( 2 x + 1 ) 6x + 3 = 3(2x + 1) 6x+3=3(2x+1), 即 6 x + 3 6x + 3 6x+3也不为质数,因此质数只能是 6 x − 1 , 6 x + 1 6x -1, 6x + 1 6x1,6x+1

代码实现:
bool isprime(int n)
{
    if(n <= 3) return n > 1;
    //若不为6x+1或6x-1 不为质数
    if(n % 6 != 1 && n % 6 != 5) return false;
    int nsqrt = (int)sqrt(n);
    for(int i = 5; i <= nsqrt; i += 6)
    {
        //因为已不存在因子为3的数,9+6i为3的倍数,因此跳过不用判断
		if(n % i == 0 || n % (i + 2) == 0)
            return flase;
    }
    return true;
}
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值