素数筛&&欧拉筛

折腾了一晚上很水的数论,整个人都萌萌哒

主要看了欧拉筛和素数筛的O(n)的算法

这个比那个一长串英文名的算法的优势在于没有多次计算一个数,也就是说一个数只筛了一次,主要是在%==0之后跳出实现的,具体的解释看的迷迷糊糊,特别是欧拉函数的求解

http://blog.csdn.net/lerenceray/article/details/12420725

代码如下

 1 void ES(){
 2     for(int i=2;i<n;i++){
 3         if (!pd[i]){
 4             prime[++top]=i;
 5             phi[i]=i-1;
 6         }
 7         for (int j=1;j<=top&&prime[j]*i<=n;j++){
 8             pd[prime[j]*i]=1;
 9             if (i%prime[j]==0){
10                 phi[prime[j]*i]=phi[i]*prime[j];
11                 break;
12             }
13             phi[prime[j]*i]=phi[i]*(prime[j]-1);
14         }
15     } 
16 }
posted @ 2016-01-08 22:01  Alisahhh  阅读(178)  评论(0编辑  收藏  举报