标签:height 3ds 更新 png 个数 get title form lan
一、欧拉函数
欧拉函数是小于x的整数中与x互质的数的个数,一般用φ(x)表示。
证明:对于正整数x,
一些(目前不需要的)性质:
求欧拉函数:
1.埃拉托斯特尼筛
求1~n所有数的欧拉函数:每次找到一个质数,就把它的倍数更新掉。复杂度大概是O(nlognlogn)。
void euler(int n){
for (int i=1;i<=n;i++) phi[i]=i;
for (int i=2;i<=n;i++)
if (phi[i]==i)for (int j=i;j<=n;j+=i)
phi[j]=phi[j]/i*(i-1);
2.欧拉筛
每次找到一个最小的因数(一定为质因数),求出x*(1 - 1/p)。复杂度为O(n)。
int euler(int n){
int res=n,a=n;
for(int i=2;i*i<=a;i++){
if(a%i==0){
res=res/i*(i-1);
while(a%i==0) a/=i;
}
}
if(a>1) res=res/a*(a-1);
return res;
}
对于x = p1^k * p2^m...,只需要求一次(1-p1)(1-p2)...就可以了,
为了保证每个质因数只被使用一次,通过以上的while循环把x中的p1除尽。
二、素数筛法
好困(我觉得这个写的挺好)
参考文章:
https://blog.csdn.net/liuzibujian/article/details/81086324
https://blog.csdn.net/paxhujing/article/details/51353672
标签:height 3ds 更新 png 个数 get title form lan
原文地址:https://www.cnblogs.com/mogeko/p/10134838.html