pku2407
求小于n并且跟n互质的数的个数
#include<cstdio>
#include<iostream>
using namespace std;
#define LL long long
const LL N = 1000000005;
LL phi(LL x)
{
LL ans = x;
for(LL i = 2; i*i <= x; i++)
{
if(x % i == 0)
{
ans = ans / i * (i-1);
while(x % i == 0) x /= i;
}
}
if(x > 1)
ans = ans / x * (x-1);
return ans;
}
int main()
{
ios_base::sync_with_stdio(false);
cin.tie(0);
cout.tie(0);
LL n;
while(cin>>n && n)
cout<<phi(n)<<endl;
return 0;
}
pku2478
求欧拉函数前n项和
#include<iostream>
#include<cstdio>
#define LL long long
using namespace std;
const int N = 1000005;
int oula[N];
LL f[N];
void Init ()
{
int i, j;
for (i=0; i<N; i++)
oula[i] = i;
oula[1] = 1;
for (i=2; i<N; i++)
{
if (oula[i] == i)
{
oula[i] = oula[i] / i * (i - 1);
for (j=i+i; j<N; j+=i)
oula[j] = oula[j] / i * (i - 1);
}
}
}
int main()
{
ios_base::sync_with_stdio(false);
cin.tie(0);
cout.tie(0);
Init();
f[2] = oula[2];
int n;
for(int i = 3; i < N; i++)
f[i] = f[i-1] + oula[i];
while(cin>>n && n)
{
cout<<f[n]<<endl;
}
return 0;
}