欧拉线性筛模板
2017-07-31 08:58
169 查看
O(n)求欧拉函数φ(i):
O(n)求莫比乌斯函数μ(i)(及其前缀和):
O(n)求约数个数d(i)(及其前缀和):
t[i]表示i的最小质因数的指数。
关于其余约数的相关问题后面再填坑。。。
inline void linear_shaker() { bool vis[maxn]; memset(vis,false,sizeof(vis)); phi[1]=1; for (int i=2;i<maxn;++i) { if (!vis[i]) prime[++tot]=i,phi[i]=i-1; for (int j=1;j<=tot&&i*prime[j]<maxn;++j) { vis[i*prime[j]]=true; if (i%prime[j]==0) {phi[i*prime[j]]=phi[i]*prime[j];break;} else phi[i*prime[j]]=phi[i]*(prime[j]-1); } } }
O(n)求莫比乌斯函数μ(i)(及其前缀和):
int sum[maxn]={0},mu[maxn]={0,1},prime[maxn],num=0; inline void get_mu() { memset(mu,INF,sizeof(mu)),mu[1]=1; for (register int i=2;i<maxn;++i) { if (mu[i]==INF) prime[++num]=i,mu[i]=-1; for (int j=1;j<=num&&i*prime[j]<maxn;++j) { if (i%prime[j]==0) {mu[i*prime[j]]=0;break;} else mu[i*prime[j]]=-mu[i]; } } for (register int i=1;i<maxn;++i) sum[i]=sum[i-1]+mu[i]; }
O(n)求约数个数d(i)(及其前缀和):
t[i]表示i的最小质因数的指数。
inline void linear_shaker() { memset(vis,0,sizeof(vis)); d[1]=1,t[1]=0; for (register int i=2;i<MAXN;++i) { if (!vis[i]) prime[++tot]=i,d[i]=2,t[i]=1; for (int j=1;j<=tot&&i*prime[j]<MAXN;++j) { vis[i*prime[j]]=true; if (i%prime[j]==0) { d[i*prime[j]]=d[i]/(t[i]+1)*(t[i]+2); t[i*prime[j]]=t[i]+1; break; } d[i*prime[j]]=d[i]<<1; t[i*prime[j]]=1; } } for (register int i=2;i<MAXN;++i) d[i]+=d[i-1]; }
关于其余约数的相关问题后面再填坑。。。
相关文章推荐
- 【数论】(贾志鹏)线性欧拉筛模板&&CODE[VS] 1453 统计素数个数2
- 模板:线性规划
- Loj-110乘法逆元(线性模板题)
- {模板}线性筛法求素数表
- [Ahoi2005]COMMON 约数研究 【欧拉线性筛的应用】
- 线性筛素数模板
- hdu 2669 Romantic 扩展欧几里得求线性方程模板题
- BZOJ 2818 Gcd 线性欧拉
- 欧拉输出路径--dfs模板
- BNU 12846 LCM Extreme 最小公倍数之和(线性欧拉筛选+递推)
- 大数据竞赛入门——线性分类模型模板
- 欧拉线性筛求质数
- 线性筛法求素数模板
- 【模板】线性筛素数
- 线性筛素数的欧拉筛法
- [Ahoi2005]COMMON 约数研究 【欧拉线性筛的应用】
- fleury算法求欧拉路径(欧拉回路)模板
- 线性规划单纯形模板
- P3383 【模板】线性筛素数
- 洛谷 P3383 【模板】线性筛素数