码迷,mamicode.com
首页 > 其他好文 > 详细

线性筛模板

时间:2018-09-06 00:10:21      阅读:182      评论:0      收藏:0      [点我收藏+]

标签:scan   scanf   ios   函数   打印   cst   style   std   amp   

 1 #include<iostream>
 2 #include<cstdio>
 3 #include<cmath>
 4 using namespace std;
 5 const int N=1e5+10;
 6 int Min[N],zs[N],cnt=0,n,phi[N];
 7 void prime(int n){
 8     memset(Min,0,sizeof(Min));
 9     for(int i=2;i<=n;i++){
10         if(Min[i]==0){
11             Min[i]=i;//自己是自己的最小质数 
12 //            phi[i]=i-1;
13             zs[++cnt]=i;
14         }
15         for(int j=1;j<=cnt;j++){//当前质数*小于等于自己的质数来筛合数(当然别筛过了) 
16             if(Min[i]<zs[j]||zs[j]>n/i){//当前i的最小质因数比自己小或乘出来会越界 
17 //                phi[i*zs[j]]=phi[i]*zs[j];//说明phi[i*zs[j]]时定会有不止一个zs[j],欧拉函数顺手乘上这个质数就好 
18                 break;
19             }
20 //            phi[zs[j]*i]=phi[i]*(zs[j]-1);//若这个质数j与i互质,则phi[i*zs[j]]=phi[i]*phi[zs[j]]=phi[i]*(zs[j]-1) 
21             Min[zs[j]*i]=zs[j];//乘出来的合数最小值肯定为小于等于自己的那个质数
22         }
23     }
24     for(int i=1;i<=cnt;i++)
25         printf("%d ",zs[i]);//打印质数 
26 }
27 int main(){
28     scanf("%d",&n);
29     prime(n);
30     return 0;
31 }

 

线性筛模板

标签:scan   scanf   ios   函数   打印   cst   style   std   amp   

原文地址:https://www.cnblogs.com/saionjisekai/p/9594878.html

(0)
(0)
   
举报
评论 一句话评论(0
登录后才能评论!
© 2014 mamicode.com 版权所有  联系我们:gaon5@hotmail.com
迷上了代码!