数论 —— 欧拉函数
2018-03-16 16:50
183 查看
欧拉函数,用φ(n)表示欧拉函数是求小于等于n的数中与n互质的数的数目
求n的欧拉函数时我们可以减去它的所有素数因子以及它的倍数
φ(12):12 == 2*2*3
素数因子有2 ,3所以我们减掉2,3的倍数
2的倍数:2,4,6,8,10,12
3的倍数:3,6,9,12
显然2,3存在重复项6,12
根据容斥定理我们可以得知
φ(12) = 12 - (12/2 + 12/3 )+12/(2*3)
容斥会很麻烦所以我们需要考虑简化版
φ(12)=12*(1-1/2)*(1-2/3) == 12 - (12/2 + 12/3 )+12/(2*3)
phi(1)=1
代码实现:int phi(int x){
int ans = x;
for(int i = 2; i*i <= x; i++){//查找素数因子
if(x % i == 0){
ans = ans / i * (i-1);
while(x % i == 0) x /= i;
}
}
if(x > 1) ans = ans / x * (x-1);
return ans;
}单个查找时间复杂度为O(√n)
可以用埃筛的方法预处理数据#include<cstdio>
const int N = 100000 + 5;
int phi
;
void Euler(){
phi[1] = 1;
for(int i = 2; i < N; i ++){
if(!phi[i]){
for(int j = i; j < N; j += i){
if(!phi[j]) phi[j] = j;
phi[j] = phi[j] / i * (i-1);
}
}
}
}
int main(){
Euler();
}
求n的欧拉函数时我们可以减去它的所有素数因子以及它的倍数
φ(12):12 == 2*2*3
素数因子有2 ,3所以我们减掉2,3的倍数
2的倍数:2,4,6,8,10,12
3的倍数:3,6,9,12
显然2,3存在重复项6,12
根据容斥定理我们可以得知
φ(12) = 12 - (12/2 + 12/3 )+12/(2*3)
容斥会很麻烦所以我们需要考虑简化版
φ(12)=12*(1-1/2)*(1-2/3) == 12 - (12/2 + 12/3 )+12/(2*3)
phi(1)=1
代码实现:int phi(int x){
int ans = x;
for(int i = 2; i*i <= x; i++){//查找素数因子
if(x % i == 0){
ans = ans / i * (i-1);
while(x % i == 0) x /= i;
}
}
if(x > 1) ans = ans / x * (x-1);
return ans;
}单个查找时间复杂度为O(√n)
可以用埃筛的方法预处理数据#include<cstdio>
const int N = 100000 + 5;
int phi
;
void Euler(){
phi[1] = 1;
for(int i = 2; i < N; i ++){
if(!phi[i]){
for(int j = i; j < N; j += i){
if(!phi[j]) phi[j] = j;
phi[j] = phi[j] / i * (i-1);
}
}
}
}
int main(){
Euler();
}
相关文章推荐
- 数论知识点3——欧拉函数
- BZOJ2186 [Sdoi2008]沙拉公主的困惑 【数论,欧拉函数,线性筛,乘法逆元】
- 数论二欧拉函数之待学习
- 【数论】欧拉函数
- [数论] HOJ 2947 Calculation 2 欧拉函数
- FZU 1969 数论 GCD+欧拉函数应用
- HDU 1695 GCD (数论-整数和素数,欧拉函数,组合数学-容斥原理)
- 【数论】gcd|扩展gcd|素数筛法|快速幂|欧拉函数(各种模板)
- 数论 - 欧拉函数模板题 --- poj 2407 : Relatives
- 欧拉函数相关数论
- UVA 11426 GCD - Extreme (II) (数论|欧拉函数)
- HDU-4983-Goffi and GCD【数论】【欧拉函数】
- 数论之求欧拉函数
- 【hdu - 3501 (数论、欧拉函数)】
- 数论学习笔记 欧拉函数(一些性质和运用)+杜教筛
- HIHO #1298 : 数论五·欧拉函数
- BZOJ2186 [Sdoi2008]沙拉公主的困惑 【数论,欧拉函数,线性筛,乘法逆元】
- 2018-01-15 HDU 5514 Ver.A 数论 GCD 欧拉函数 总结归纳
- 数论-欧拉函数-Bi-shoe and Phi-shoe LightOJ - 1370
- 洛谷 2158 数论 打表 欧拉函数