【POJ3090】Visible Lattice Points-欧拉函数应用
测试地址:Visible Lattice Points
题目大意:对于一个点
做法:这题需要应用欧拉函数的性质。
经过分析,我们知道对于整点
以下是本人代码:
#include <cstdio>
#include <cstdlib>
#include <cstring>
#include <iostream>
#include <algorithm>
using namespace std;
int T,N,phi[1010]={0},sum[1010]={0};
bool isprime[1010]={0};
void calc_phi()
{
isprime[1]=1;
for(int i=2;i<=1000;i++)
phi[i]=i;
for(int i=2;i<=1000;i++)
{
if (!isprime[i])
{
for(int j=1;i*j<=1000;j++)
{
if (j>1) isprime[i*j]=1;
phi[i*j]=phi[i*j]*(i-1)/i;
}
}
}
sum[1]=0;
for(int i=2;i<=1000;i++) sum[i]=sum[i-1]+phi[i];
}
int main()
{
scanf("%d",&T);
calc_phi();
for(int t=1;t<=T;t++)
{
scanf("%d",&N);
printf("%d %d %d\n",t,N,2*sum[N]+3);
}
return 0;
}