为什么线性筛欧拉函数i%prime[j]==0的时候phi[i*prime[j]]=phi[i]*prime[j]
来源:互联网 发布:安卓小说阅读器源码 编辑:程序博客网 时间:2024/05/01 16:21
转载自@ITAK
http://blog.csdn.net/qingshui23/article/details/50969344
看贾志鹏线性筛的时候想起来的。
我有一个繁琐的证明- -。
证明ϕ(pm)=p×ϕ(m),p为素数,m∈Z.
设
m=pα⋅m′,α,m′∈N,(pα,m′)=1.
那么
ϕ(m)=ϕ(m′)⋅ϕ(pα).
而
ϕ(pα)=(p−1)pα−1
因此
ϕ(m)=ϕ(m′)⋅((p−1)pα−1).
又因为
n=p⋅m=m′⋅pα+1
显然m′和pα+1互素,所以
ϕ(n)=ϕ(m′)⋅ϕ(pα+1)=ϕ(m′)⋅p⋅(p−1)⋅pα−1=ϕ(m)⋅p
证毕。
顺便贴下欧拉函数筛法代码:
#include<iostream>#include<cstdio>#include<cstring>using namespace std;const int MAXN = 50005;int n;int phi[MAXN],prime[MAXN],cnt_p;int flag_p[MAXN];void getphi(){ cnt_p = 0; memset(flag_p,0,sizeof(flag_p)); //0为素数 flag_p[0] = 1; flag_p[1] = 1; phi[0] = 0; phi[1] = 0;//??? for(int i=2; i<MAXN; ++i) {//cout<<"xxx"<<endl; if(!flag_p[i]) { prime[cnt_p++] = i; phi[i] = i-1; } for(int j=0; j<cnt_p && i*prime[j]<MAXN; ++j) { flag_p[i*prime[j]] = 1; if(!(i%prime[j])) { phi[i*prime[j]] = phi[i]*prime[j]; break;} else phi[i*prime[j]] = phi[i]*(prime[j]-1); //若p为素数,则pih[p] = p-1; } } return ;}int main(){ getphi(); // for(int i=0; i<100; ++i) // cout<<i<<" "<<phi[i]<<endl;}
0 0
- 为什么线性筛欧拉函数i%prime[j]==0的时候phi[i*prime[j]]=phi[i]*prime[j]
- 为什么线性筛欧拉函数i%prime[j]==0的时候phi[i*prime[j]]=phi[i]*prime[j]
- #109D Colliders 素数筛 统计质数因子 data[j][ ++data[j][0] ] = prime[i];
- i += j ;与 i = i + j ; 的区别
- i = i++, i = ++i, j = i++, j = ++i 的区别
- n[i][j] <= n[i][j+1] n[i][j] <= n[i+1][j]
- i ^= (j ^= (i ^= j))的IL代码
- for(i=0,j=0;i<10,j<6;i++,j++)问题
- java i+=j 与 i = i+j 区别
- 快速排序法 为什么i=j???
- [日常套路] Sum[i, j] = Sum[0, j]
- cuda计算C[i][j]=A[i][j]+B[i][j]
- for(i=0,j=0;i<10,j<10;i++,j++)用python怎么写
- 从一给定的顺序表L中删除下标i--j(i<=j,包括i、j)的所有元素,假定i、j都是合法的
- i++ 和 i=i++和i=i+1和j=j++的细节问题
- for(j=0,i=0;j<6,i<10;j++,i++) { k=i+j; } k 值最后是多少?
- for(j=0,i=0;j<6,i<10;j++,i++) { k=i+j; } k 值结果是多少?
- i+++j
- 设置启动界面(不带白屏)
- JAVA 线程池的理解
- 挖掘机技术哪家强
- POJ 1611 The Suspects (并查集)
- 数据结构链表总结
- 为什么线性筛欧拉函数i%prime[j]==0的时候phi[i*prime[j]]=phi[i]*prime[j]
- ArcGis把jpg、png格式地图图片转换为tif格式
- zsh不兼容的坑-zsh:no matches found
- 产生死锁的必要条件
- Python——13定制类
- Android应用中res/drawable文件夹下定义的xml文件内容详解(一)
- 仿宝宝树孕育的圆形ListView的实现
- 锤子剪刀布
- Android开发笔记之RecycleView加载不同item布局的实现