jzoj3927【NOIP2014模拟11.6】可见点数(欧拉函数)

来源:互联网 发布:阿里云怎么使用 编辑:程序博客网 时间:2024/05/17 23:13

3927. 【NOIP2014模拟11.6】可见点数

Description

ZPS经过长期的努力争取,终于成为了0901班的领操员,他要带领0901班参加广播操比赛。现在0901班的队伍可以看作是一个n*n的点阵,每个人都站在格点上。现在作为领操员的ZPS站(0,0)点,他想知道如果0901班的队伍站齐了,他能看到多少个人的脸(假设每个人的身高相同,体积相同)。

Input

一个正整数n。

Output

ZPS能看到多少个人的脸(当然他是看不到自己的脸的)。

分析:这题很显然两个坐标互质就可以看得到,用欧拉函数求就行了。

代码

#include <cstdio>#define maxn 100000using namespace std;int f[maxn];int main(){    int n;    scanf("%d",&n);    for (int i=1;i<=n;i++)        f[i]=i;    for (int i=2;i<=n;i++)        if (i%2==0) f[i]/=2;            else if (f[i]==i)            {                for (int j=i;j<=n;j+=i)                    f[j]=f[j]/i*(i-1);            }    long long ans=0;    for (int i=1;i<n;i++)        ans+=f[i];    if (n==1) printf("0");        else printf("%lld",ans*2+1);}
原创粉丝点击