【模板】打印素数表
①埃拉托斯特尼篩法
要得到自然數n以內的全部素數,必須把不大于?的所有素數的倍數剔除,剩下的就是素數。
數組中值為0的元素,其下標即為素數!
ps:復雜度O(nloglogn),還可以優化!
#define MAX 100005 int prime[MAX]; void PrimeList() {int t,i;prime[0]=prime[1]=1;for(i=2;i<MAX/2;i++){if(!prime[i]){t=2*i;while(t<=MAX){prime[t]=1;t+=i;}}} }?
②線性篩選法——歐拉篩法
歐拉篩法保證每個合數只會被它的最小質因數篩去,時間復雜度降低到O(n)
數組里的下標對應的是第幾個素數!
#define MAX 100005 int prime[MAX],check[MAX]; void Primelist() {memset(check,0,sizeof(check));int cnt=1,i,j;for(i=2;i<=MAX;i++){if(!check[i])prime[cnt++]=i;for(j=1;j<=cnt;j++){if(i*prime[j]>MAX)break;check[i*prime[j]]=1;if(i%prime[j]==0)break;}} }?
轉載于:https://www.cnblogs.com/kannyi/p/8406422.html
總結
- 上一篇: 你好同学向你咨询公共英语三级考试的事情
- 下一篇: 程序外框不显示