2.题目描述
给定N,求所有小于等于N的a/b,gcd(a,b)=1(a<b).
#include <iostream>
#include <cstring>
#include <cmath>
#include <stdio.h>
using namespace std;
#define maxn 1000000
long long phi[1000002];
int n;
int main() {
for(int i=1;i<=maxn;i++) phi[i] = i;
for (int i = 2; i <= maxn; i += 2) phi[i] /= 2;
for (int i = 3; i <= maxn; i += 2)
if(phi[i] == i) {
for (int j = i; j <= maxn; j += i)
phi[j] = phi[j] / i * (i - 1);
}
for(int i=3; i<=maxn; i++) {
phi[i]+=phi[i-1];
}
while(scanf("%d",&n)!=EOF)
{
if(n==0)
return 0;
printf("%lld\n",phi[n]);
}
return 0;
}