Luogu P2158 [SDOI2008]仪仗队【数学/欧拉函数】by cellur925

题目描述

作为体育委员,C君负责这次运动会仪仗队的训练。仪仗队是由学生组成的N * N的方阵,为了保证队伍在行进中整齐划一,C君会跟在仪仗队的左后方,根据其视线所及的学生人数来判断队伍是否整齐(如下图)。  现在,C君希望你告诉他队伍整齐时能看到的学生人数。

输入输出格式

输入格式:

 

共一个数N

 

输出格式:

 

共一个数,即C君应看到的学生人数。

 

输入输出样例

输入样例#1: 
4
输出样例#1: 
9

说明

【数据规模和约定】

对于 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 }
View Code

 

【题外话】这题跟poj3090(的图)一毛一样qwq。题面略有区别,poj把这个方阵放到了一个平面直角坐标系中于是原点就是(0,0);

方阵行列数为0~n-1。聪明的你,能不能想到他们的差异?

posted @ 2018-07-30 22:21  cellur925&Chemist  阅读(202)  评论(0编辑  收藏  举报