POJ 2478 Farey Sequence

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;
}

猜你喜欢

转载自blog.csdn.net/wzx1078132012/article/details/81188644