洛谷P2158 [SDOI2008]仪仗队 欧拉函数的应用
https://www.luogu.org/problem/P2158
#include<bits/stdc++.h> #define int long long using namespace std; int n,ans; int Star_Platinum(int n) { //求欧拉函数 int sum=n; for(int i=2; i*i<=n; i++) if(n%i==0) { sum-=sum/i; while(n%i==0) n/=i; } if(n>1) sum-=sum/n; return sum; } signed main() { scanf("%lld",&n); if(n==1) { printf("0\n"); //特判 return 0; } for(int i=2; i<=n-1; i++) ans+=Star_Platinum(i); printf("%lld\n",ans*2+3); //求总的数目 return 0; }
建立平面直接坐标系,将左下角看作原点,如果__gcd=(x,y)==1,那么就能看见,因为方阵为正方形,所以,利用这两个性质,先将方阵分割成两个直角三角形,再反别算2到n-1的欧拉函数,最后*2+3