关于欧拉函数有如下几点性质:
1、phi(1) = 1
2、若n是质数,那么phi(n) = n-1
3、若n是质数x的k次幂,phi(n) = (x-1)*x^(k-1)
4、若m,n互质,那么phi(m*n) = phi(m)*phi(n)
5、若n是奇数,那么phi(2*n) = phi(n)
6、若x,y是质数,且n = x*y,那么phi(n) = (x-1)*(y-1)
6、小于n且与n互质的数的和为:n/2 * phi(n)
其中第4条性质是因为欧拉函数是积性函数,莫比乌斯函数也是一个积性函数
性质1:
写成
可推出
感觉可能也用不太到
HDU:2824
最简单的模板题
hdu2824
#include <cstdio>
#include <cstring>
const int MAXN = 3e6+5;
__int64 phi[MAXN];
void PhiTable(int n)
{
for(int i=2; i<=n; ++i)
phi[i] = 0;
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()
{
int a, b;
PhiTable(3e6);
while(~scanf("%d%d", &a, &b))
{
__int64 ans = 0;
for(int i=a; i<=b; ++i) // 累加答案
ans += phi[i];
printf("%I64d\n", ans);
}
return 0;
}