线性求区间欧拉函数(顺便线性求区间内所有素数)(类似欧拉线性素数筛)
来源:互联网 发布:女朋友漂亮知乎 编辑:程序博客网 时间:2024/05/17 00:27
该算法在可在线性时间内筛素数的同时求出所有数的欧拉函数。
需要用到如下性质(p为质数):
1. phi(p)=p-1 因为质数p除了1以外的因数只有p,故1至p的整数只有p与p不互质
2. 如果i mod p = 0, 那么phi(i * p)=p * phi(i) 证明如下
(上述证明存在bug。。感谢@PrimaryOIer指教)
上面的过程证明了从区间[1,i]->[i+1,i+i],若整数n不与i互质,n+i依然与i不互质。下面给出另一个证明:若整数n与i互质,n+i与i依然互质
3.若i mod p ≠0, 那么phi(i * p)=phi(i) * (p-1)
i mod p 不为0且p为质数, 所以i与p互质, 那么根据欧拉函数的积性phi(i * p)=phi(i) * phi(p) 其中phi(p)=p-1即第一条性质
void get_phi_and_primes(int n){for(int i = 1;i <= n;i++) phi[i] = 0;phi[1] = 1;for(int i = 2;i <= n;i++){if(!phi[i]) {primes[++pcnt] = i;phi[i] = i - 1;}for(int j = 1;j <= pcnt && primes[j] * i <= n;j++){int t = primes[j];if(i % primes[j] == 0){phi[i * t] = phi[i] * t;break;}else phi[i * t] = phi[i] * (t - 1);}}}
阅读全文
0 0
- 线性求区间欧拉函数(顺便线性求区间内所有素数)(类似欧拉线性素数筛)
- 线性时间求素数及欧拉phi函数
- 线性筛素数and欧拉函数
- 线性筛选素数(欧拉筛选)
- 欧拉线性筛法求素数(顺便实现欧拉函数的求值)
- 欧拉线性筛法求素数(顺便实现欧拉函数的求值)
- 欧拉线性筛法求素数(顺便实现欧拉函数的求值)
- 欧拉线性筛法求素数
- 线性筛选素数和线性筛选欧拉函数【bzoj2190]
- poj 2478【线性筛素数+欧拉函数】
- 线性时间内筛素数和欧拉函数
- 欧拉函数 素数线性筛法模板
- 欧拉筛——线性筛素数和欧拉函数
- 线性筛求素数
- 大数区间筛素数 线性
- 线性筛(同时得到欧拉函数和素数表)
- Leetcode Count Primes (欧拉线性筛法求素数)
- 欧拉线性筛求质数
- 任意长度数字的加法
- [Leetcode-22]Generate Parentheses 生成圆括号
- MongoDB聚合篇
- 问题 E: QAQ & 君临天下 || 天行九歌||多校联萌(三)
- 聚类分析经典算法讲解及实现
- 线性求区间欧拉函数(顺便线性求区间内所有素数)(类似欧拉线性素数筛)
- 微调-模型
- ACM暑假集训日记 17.8.11
- BZOJ 2818 Gcd + spoj 4491(莫比乌斯反演 分块)
- POJ 3046 -- Ant Counting (动态规划)
- 一些java程序的运行结果
- .Net基础视频教程之6-函数
- 【暴力预处理+剪枝/bitset】Golf Bot UVALive
- fabric源码解析12——peer的MSP服务