判断素数的最快方法

首先判断特殊的,1不是素数,2和3是素数。

其次剩下的所有数都看作是6n、6n+1、6n+2、6n+3、6n+4、6n+5,显然6n、6n+2=2(3n+1)、6n+3=3(2n+1)、6n+4=2(3n+2)都不为素数。所以每六个数的循环中只需判断6n+1和6n+5。

C++代码如下:

bool isPrime(int n)
{
    if (n == 1) return false;
    if (n == 2 || n == 3) return true;
    if (n % 6 != 5 && n % 6 != 1) return false;
    float n_sqrt = sqrt(n);
    for (int i = 5; i < n_sqrt; i+=6)
        if (n % i == 0 || n % (i + 2) == 0) return false;
    return true;
}
  • 3
    点赞
  • 5
    收藏
    觉得还不错? 一键收藏
  • 1
    评论
好的,下面是 Python 判断素数的五种方法: 1. 蛮力法:从2开始遍历到n-1,如果n能被其中任意一个数整除,则不是素数。 ```python def is_prime(n): if n <= 1: return False for i in range(2, n): if n % i == 0: return False return True ``` 2. 优化的蛮力法:只需要遍历到n的平方根即可。 ```python import math def is_prime(n): if n <= 1: return False for i in range(2, int(math.sqrt(n))+1): if n % i == 0: return False return True ``` 3. 筛法:从2开始,将2的倍数、3的倍数、4的倍数……都标记为合数,最后没有被标记的数即为素数。 ```python def sieve(n): primes = [True] * (n+1) primes[0], primes[1] = False, False for i in range(2, int(math.sqrt(n))+1): if primes[i]: for j in range(i*i, n+1, i): primes[j] = False return primes def is_prime(n): if n <= 1: return False primes = sieve(n) return primes[n] ``` 4. 费马小定理:如果n是素数,那么对于任意a,a^(n-1) mod n = 1。该算法的缺陷是当n不是素数时,结果也可能是1,因此需要进行多次测试。 ```python import random def power(a, n, p): res = 1 while n > 0: if n & 1: res = (res * a) % p a = (a * a) % p n >>= 1 return res def is_prime(n, k=5): if n <= 1 or n == 4: return False if n <= 3: return True for _ in range(k): a = random.randint(2, n-2) if power(a, n-1, n) != 1: return False return True ``` 5. Miller-Rabin算法:该算法是费马小定理的一种扩展,可以快速判断一个数是否是合数。该算法的精度可以通过调整参数k来控制,一般取10-20。 ```python import random def power(a, n, p): res = 1 while n > 0: if n & 1: res = (res * a) % p a = (a * a) % p n >>= 1 return res def is_prime(n, k=10): if n <= 1 or n == 4: return False if n <= 3: return True r, d = 0, n-1 while d % 2 == 0: r += 1 d //= 2 for _ in range(k): a = random.randint(2, n-2) x = power(a, d, n) if x == 1 or x == n-1: continue for _ in range(r-1): x = (x * x) % n if x == n-1: break else: return False return True ``` 以上就是 Python 判断素数的五种方法,希望对你有所帮助!

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值