Luogu P2158 [SDOI2008]仪仗队【数学/欧拉函数】by cellur925
题目描述
作为体育委员,C君负责这次运动会仪仗队的训练。仪仗队是由学生组成的N * N的方阵,为了保证队伍在行进中整齐划一,C君会跟在仪仗队的左后方,根据其视线所及的学生人数来判断队伍是否整齐(如下图)。 现在,C君希望你告诉他队伍整齐时能看到的学生人数。
输入输出格式
输入格式:
共一个数N
输出格式:
共一个数,即C君应看到的学生人数。
输入输出样例
说明
【数据规模和约定】
对于 100% 的数据,1 ≤ N ≤ 40000
队伍整齐,当且仅当在n*n的方阵中;能被看到的人,当且仅当它与左下角的点连线所得的线段上没有别人。
剩下的冷静分析交给dalao @slzxzxh (侵删
code
1 #include<cstdio> 2 #include<algorithm> 3 #include<cmath> 4 5 using namespace std; 6 typedef long long ll; 7 8 int n; 9 ll ans,tmp; 10 11 ll olaphi(ll x) 12 { 13 ll cnt=x; 14 for(ll i=2;i<=sqrt(x);i++) 15 { 16 if(x%i==0) 17 { 18 cnt=cnt/i*(i-1); 19 while(x%i==0) x/=i; 20 } 21 } 22 if(x>1) cnt=cnt/x*(x-1); 23 return cnt; 24 } 25 26 int main() 27 { 28 scanf("%d",&n); 29 for(ll i=2;i<=n-1;i++) tmp+=olaphi(i); 30 ans+=tmp*2; 31 if(ans) ans+=3; 32 printf("%lld\n",ans); 33 // for(ll i=2;i<=n;i++) printf("%lld ",olaphi(i)); 34 return 0; 35 }
【题外话】这题跟poj3090(的图)一毛一样qwq。题面略有区别,poj把这个方阵放到了一个平面直角坐标系中于是原点就是(0,0);
方阵行列数为0~n-1。聪明的你,能不能想到他们的差异?
独立意志与自由思想是必须争的,且须以生死力争。