欧拉函数是少于或等于n的数中与n互质的数的数目
互质是指两个数的公约数只有1的数
公式
比如1
1和1互质,欧拉函数值为1
比如2
2和1互质,欧拉函数值为1
比如3
3和1互质,3和2互质,欧拉函数值为2
比如求12的欧拉函数值,12=223
质因数有12(1-1/2)(1-1/3)=4
性质
有关欧拉函数的一些性质
- 小于n且与n互质的数的和为n*phi(n)/2
- 小于n且与n不互质的数的和为1到(n-1)的和减去上面的值
- 欧拉函数与gcd有关系,欧拉函数就是那些gcd(i,n)为1数的个数
证明第1个结论
i与n互质,即gcd(i,n)=1,那么gcd(n-i,n)也是1
也就是说n大于2的时候欧拉函数值肯定是偶数,且成对出现,phi[i]和phi[phi(n)-i]的和肯定是n
那么和就是phi(n)/2*n
模板
给nm求出[n,m]的欧拉函数值和
#include <iostream>
#include <cstdio>
#define ll long long
using namespace std;
const int maxn=3e6+5;
ll a[maxn];
void euler(){
for(ll i=1;i<=maxn-5;i++){
a[i]=i;
}
for(ll i=2;i<=maxn-5;i++){
if(a[i]==i){
for(ll j=i;j<=maxn-5;j+=i){
a[j]=a[j]/i*(i-1);
}
}
}
}
int main(){
int n,m;
euler();
while(~scanf("%d%d",&n,&m)){
ll sum=0;
for(in