题目描述
作为体育委员,C君负责这次运动会仪仗队的训练。仪仗队是由学生组成的N * N的方阵,为了保证队伍在行进中整齐划一,C君会跟在仪仗队的左后方,根据其视线所及的学生人数来判断队伍是否整齐(如下图)。 现在,C君希望你告诉他队伍整齐时能看到的学生人数。
输入输出格式
输入格式:
共一个数N
输出格式:
共一个数,即C君应看到的学生人数。
输入输出样例
输入样例#1:
4
输出样例#1:
9
说明
【数据规模和约定】
对于 100% 的数据,1 ≤ N ≤ 40000
队伍整齐,当且仅当在n*n的方阵中;能被看到的人,当且仅当它与左下角的点连线所得的线段上没有别人。
剩下的冷静分析交给dalao @slzxzxh (侵删
code
#include<cstdio>
#include<algorithm>
#include<cmath> using namespace std;
typedef long long ll; int n;
ll ans,tmp; ll olaphi(ll x)
{
ll cnt=x;
for(ll i=;i<=sqrt(x);i++)
{
if(x%i==)
{
cnt=cnt/i*(i-);
while(x%i==) x/=i;
}
}
if(x>) cnt=cnt/x*(x-);
return cnt;
} int main()
{
scanf("%d",&n);
for(ll i=;i<=n-;i++) tmp+=olaphi(i);
ans+=tmp*;
if(ans) ans+=;
printf("%lld\n",ans);
// for(ll i=2;i<=n;i++) printf("%lld ",olaphi(i));
return ;
}
【题外话】这题跟poj3090(的图)一毛一样qwq。题面略有区别,poj把这个方阵放到了一个平面直角坐标系中于是原点就是(0,0);
方阵行列数为0~n-1。聪明的你,能不能想到他们的差异?