AcWing 201. 可见的点

在一个平面直角坐标系的第一象限内,如果一个点(x,y)与原点(0,0)的连线中没有通过其他任何点,则称该点在原点处是可见的。

编写一个程序,计算给0<x,y<=n定整数N的情况下,满足的可见点(x,y)的数量(可见点不包括原点)。

 

#include<bits/stdc++.h>
#define N 10000
#define ll long long
using namespace std;
int pr[N],phi[N],v[N];
ll sum[N];
void ol(int x)
{
    phi[1]=pr[1]=1;
    int cut=0;
    for(int i=2;i<=x;i++)
    {
        if(v[i]==0)pr[++cut]=i,phi[i]=i-1;
        for(int j=1;pr[j]<=x/i&&j<=cut;j++)
        {
            v[i*pr[j]]=pr[j];
            if(i%pr[j]==0)
            {
                phi[i*pr[j]]=pr[j]*phi[i];
                break;
            }
            phi[i*pr[j]]=phi[i]*(pr[j]-1);
        }
    }
    for(int i=1;i<=1000;i++)sum[i]=sum[i-1]+phi[i];
}
int main()
{
    int t;
    cin>>t;
    int k=0;
    ol(1000);
    while(++k<=t)
    {
        int n;cin>>n;
        printf("%d %d %lld\n",k,n,2*sum[n]+1);
    }
    return 0;
}

 

AcWing 201. 可见的点

上一篇:关闭应用程序的所有子窗体


下一篇:AcWing 1290. 越狱