python反素数算法优化_【数学】素数相关算法、结论总结

弱菜开始学数论了,不定时更新。。。一.素数定理素数分布:小于x的素数大约有 x/ln(x)个推论:如果Pn为第n个素数 那个Pn约等于n*ln(n);二.素数测试1.sqrt(n)的朴素测试。这个就不多说了,数据范围小的时候比较方便2.nlogn的筛法voidsetprime(){memset(prime, 0, sizeof(prime));//为了方便赋值。令prime[i]=0 表示 i是素...
摘要由CSDN通过智能技术生成

弱菜开始学数论了,不定时更新。。。

一.素数定理

素数分布:小于x的素数大约有 x/ln(x)个

推论:如果Pn为第n个素数 那个Pn约等于n*ln(n);

二.素数测试

1.sqrt(n)的朴素测试。这个就不多说了,数据范围小的时候比较方便

2.nlogn的筛法

voidsetprime()

{

memset(prime, 0, sizeof(prime));//为了方便赋值。令prime[i]=0 表示 i是素数for (int i=2; i

{for (int k=i*i; k

prime[k]=1;

}return;

}

3.线性筛

2中筛法会重复筛掉部分合数,因此复杂度还可以优化,得到线性筛

voidsetprime()

{for(long i = 2 ; i < N ; i ++)

{if(!isNotPrime[i])

prime[num_prime++]=i;for(long j = 0 ; j < num_prime && i * prime[j] < N ; j ++)

{

isNotPrime[i* prime[j]] = 1;if( !(i %prime[j] ) )break; //关键优化

}

}return;

}

此筛法的关键在于注释中的break。prime[]数组记录素数。当i可以整除prime[j]的时候break,原理见 http://blog.c

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
素数筛法是一种用于查找素数算法,其基本思路是从小到大依次枚举每一个数,如果该数还没有被标记为非素数,则将其所有的倍数都标记为非素数。最终没有被标记的数即为素数Python实现素数筛法通常有两种方式:埃氏筛和欧拉筛。 1. 埃氏筛法 埃氏筛法是一种最简单直观的素数筛法,其思想是从2开始,将每个质数的倍数都标记成合数,以达到筛选素数的目的。 具体实现过程如下: ``` def eratosthenes(n): is_prime = [True] * (n+1) # 先将所有数标记为素数 is_prime[0] = is_prime = False # 0和1不是素数 for i in range(2, int(n**0.5)+1): # 从2到根号n枚举每个质数 if is_prime[i]: # 如果i是素数 for j in range(i*i, n+1, i): # 将i的倍数都标记成合数 is_prime[j] = False return [i for i in range(2, n+1) if is_prime[i]] # 返回所有素数的列表 ``` 2. 欧拉筛法 欧拉筛法是一种时间复杂度更优秀的素数筛法,其核心思想是在筛选过程中避免重复标记合数,通过每个合数只被它的最小质因子筛选一次来实现。 具体实现过程如下: ``` def euler(n): is_prime = [True] * (n+1) # 先将所有数标记为素数 prime = [] # 存储所有素数 for i in range(2, n+1): # 从2到n枚举每个数 if is_prime[i]: # 如果i是素数 prime.append(i) # 加入素数列表 for p in prime: # 遍历已有的素数 if p * i > n: # 如果已有的最大素数乘以i已经超过n,就不必再筛了 break is_prime[p * i] = False # 将p*i标记成合数 if i % p == 0: # 如果i能够整除p,说明p是i的最小质因子 break return prime # 返回所有素数的列表 ```
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值