hdu 4556 Stern-Brocot Tree
刚开始不知道怎么做,看了大神的做法后,才知道要用到欧拉函数……
#include<iostream>
using namespace std;
const int N=1000010;
__int64 euler[N];
void get_euler()
{
int i,j;
for(i=1;i<N;i++)
euler[i]=i;
for(i=2;i<N;i++)
if(euler[i]==i)
for(j=i;j<N;j+=i)
euler[j]-=euler[j]/i;
}
void Init()
{
get_euler();
for(int i=2;i<N;i++)
euler[i]+=euler[i-1];
}
int main()
{
Init();
int n;
while(~scanf("%d",&n))
{
printf("%I64d\n",euler[n]*2+1);
}
return 0;
}