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

 

發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章