//欧拉函数
//若p是质数e[p] = p-1;
//若n是质数p的k次幂,e[p]=(p-1)p^(k-1)因为除了p的倍数都与n互质
//if(n%a == 0 && n/a%a == 0)e[n] = e[n/a]*a
//if(n%a == 0 && n/a%a != 0)e[n] = e[n/a]*(a-1)
#include<iostream>
#include<cstdio>
#include<cstring>
#include<cstring>
const int maxn = 3000005;
using namespace std;
int e[maxn];
void init()
{
for(int i = 2; i < maxn; i++)
{
e[i] = i;
}
for(int i = 2; i < maxn; i++)
{
if(i == e[i])//经此一役,i为质数
{
for(int j = i; j < maxn; j += i)//
{
e[j] = (e[j]/i)*(i-1);//if(n%a == 0 && n/a%a != 0)e[n] = e[n/a]*(a-1)
}
}
}
}
int main()
{
init();
int a,b;
__int64 sum;
while(scanf("%d%d",&a,&b) != EOF)
{
sum = 0;
for(int i = a; i <= b; i++)
sum += e[i];
printf("%I64d\n",sum);
}
return 0;
}
HDU_2824_欧拉函数
最新推荐文章于 2020-05-28 15:25:51 发布