UVA - 10820欧拉函数的应用
这是一道很基础的欧拉函数的题目
题意要求 (x,y) 互质 &&x<=n&&y<=n
求互质对数 可以运用容斥,求出 phi(n)=n(1-1/n1)(1-1/n2)......(1-1/nk);
因为(2,4) (4,2) 算两对,所以 答案为 2*f(n)+1;
![](https://images.cnblogs.com/OutliningIndicators/ContractedBlock.gif)
#include<stdio.h> #include<string.h> #include<stdlib.h> #include<iostream> #include<algorithm> #include<string.h> #include<stdlib.h> #include<iostream> #include<algorithm> #include<string> #include<queue> #include<math.h> #include<map> using namespace std; #define MST(vis,x) memset(vis,x,sizeof(vis)) #define INF 0x3f3f3f3f #define ll long long #define ull unsigned long long #define maxn 50010 #define mod 1000000007 int phi[maxn]; int main() { int n; while(scanf("%d",&n)!=EOF) { if(n==0)break; MST(phi,0); phi[1]=1; for(int a=2; a<=n; a++)if(!phi[a]) { for(int b=a; b<=n; b+=a) { if(!phi[b])phi[b]=b; phi[b]=phi[b]/a*(a-1); } } ll sum=0; for(int a=2; a<=n; a++) sum+=phi[a]; printf("%lld\n",2*sum+1); } return 0; }