题目:UVa10820
题意:
给出n求,n以内的有序数对(x, y)互素的对数。
分析:
设(x>y)即sum[ n ]表示符合的对数,即答案就数2*sum[n]+1,1是符合条件的(1,1)这对数。
即打个欧拉表就可以解决。
代码:
![](https://images.cnblogs.com/OutliningIndicators/ContractedBlock.gif)
#include<stdio.h> #include<iostream> #include<algorithm> #include<string.h> using namespace std; const int max_=5e4+5; long long sum[max_],phi[max_]; void phi_table() { memset(phi,0,sizeof(phi)); phi[1]=1; sum[1]=0; for(int i=2;i<max_;i++) { if(!phi[i]) { for(int j=i;j<max_;j+=i) { if(!phi[j]) phi[j]=j; phi[j]=phi[j]/i*(i-1); } } } for(int i=2;i<max_;i++) { sum[i]+=sum[i-1]+phi[i]; } } int main() { int n; phi_table(); while(~scanf("%d",&n)) { if(n==0) break; printf("%lld\n",2*sum[n]+1); } }