首页 > 其他 > 详细

POJ3090 Visible Lattice Points

时间:2020-07-29 20:06:01      阅读:81      评论:0      收藏:0      [点我收藏+]

http://poj.org/problem?id=3090

欧拉函数

求出互质的数对\((x,y)\)个数

\((x,y)\)\((y,x)\)算两对,要乘\(2\),不过\((1,1)\)需要特判

还有水平、垂直两种情况

\[Ans=2\sum_{i=1}^N \varphi(i)+1 \]

\(C++ Code:\)

#include<iostream>
#include<cstdio>
#include<algorithm>
#define N 1005
#define ll long long
using namespace std;
int cnt,phi[N],prime[N];
ll sphi[N];
bool pri[N];
int T,n,c;
void Pre()
{
    sphi[1]=phi[1]=1;
    for (int i=2;i<=N;i++)
    {
        if (!pri[i])
        {
            prime[++cnt]=i;
            phi[i]=i-1;
        }
        for (int j=1;j<=cnt;j++)
        {
            ll g=(ll)i*prime[j];
            if (g>N)
                break;
            pri[g]=true;
            if (i%prime[j]==0)
            {
                phi[g]=phi[i]*prime[j];
                break;
            }
            phi[g]=phi[i]*(prime[j]-1);
        }
        sphi[i]=sphi[i-1]+phi[i];
    }
}
int main()
{
    Pre();
    scanf("%d",&c);
    while (c --> 0)
    {
        scanf("%d",&n);
        T++;
        printf("%d %d %lld\n",T,n,(sphi[n] << 1)+1);
    }
    return 0;
}

POJ3090 Visible Lattice Points

原文:https://www.cnblogs.com/GK0328/p/13398502.html

(0)
(0)
   
举报
评论 一句话评论(0
关于我们 - 联系我们 - 留言反馈 - 联系我们:wmxa8@hotmail.com
© 2014 bubuko.com 版权所有
打开技术之扣,分享程序人生!