题目大意
输入n,求有多少个二元组满足1<=x,y<=n,且x,y互素。
解析
实际上对于每个n,求从1到n的欧拉函数之和再减1,可事先对其进行处理,再O(1)查询。时间大约是0ms。
#include<bits/stdc++.h> using namespace std; int al[50001],bl[50001]; void cl(){ memset(al,0,sizeof(al)); memset(bl,0,sizeof(bl)); bl[1]=al[1]=1; for(int i=2;i<=50000;i++) if(!al[i]) for(int j=i;j<=50000;j+=i){ if(!al[j]) al[j]=j; al[j]=al[j]/i*(i-1); } for(int i=2;i<=50000;i++) bl[i]=bl[i-1]+al[i]; } int main(){ cl(); int n; while(scanf("%d",&n)){ if(n==0) break; printf("%d\n",2*bl[n]-1); } return 0; }