题
意
:
给
一
个
n
∗
n
的
方
格
,
问
从
坐
标
(
0
,
0
)
点
能
看
到
多
少
点
.
只
有
一
个
点
没
有
题意: 给一个n{*}n的方格,问从坐标(0,0)点能看到多少点.只有一个点没有
题意:给一个n∗n的方格,问从坐标(0,0)点能看到多少点.只有一个点没有
被
另
一
个
点
挡
住
能
看
到
.
被另一个点挡住能看到.
被另一个点挡住能看到.
分
析
:
列
举
4
∗
4
的
方
格
,
我
们
可
以
发
现
每
一
个
满
足
的
点
的
坐
标
(
x
,
y
)
分析:列举4{*}4的方格,我们可以发现每一个满足的点的坐标(x,y)
分析:列举4∗4的方格,我们可以发现每一个满足的点的坐标(x,y)
那
么
x
就
是
y
对
应
的
一
个
欧
拉
函
数
,
所
以
a
n
s
=
2
∗
φ
(
n
)
+
1
那么x就是y对应的一个欧拉函数,所以ans=2{*}φ(n)+1
那么x就是y对应的一个欧拉函数,所以ans=2∗φ(n)+1
#include <set>
#include <map>
#include <list>
#include <cmath>
#include <stack>
#include <queue>
#include <string>
#include <bitset>
#include <vector>
#include<cstring>
#include <stdio.h>
#include <iostream>
#include <algorithm>
/*
ios::sync_with_stdio(false);cin.tie(0);cout.tie(0);*/
#define INF 0x3f3f3f3f
using namespace std;
typedef long long ll;
typedef unsigned long long ull;
inline int read(){int s=0,w=1;char ch=getchar();
while(ch<'0'||ch>'9'){if(ch=='-')w=-1;ch=getchar();}
while(ch>='0'&&ch<='9') s=s*10+ch-'0',ch=getchar();return s*w;}
const int maxn = 1e3+5;
int phi[maxn];
void Phi()
{
for(int i=1;i<maxn;i++) phi[i]=i;
for(int i=2;i<maxn;i++){
if(phi[i]==i)
for(int j=i;j<maxn;j+=i)
phi[j]=phi[j]/i*(i-1);
}
for(int i=2;i<maxn;i++)
phi[i]+=phi[i-1];
for(int i=1;i<maxn;i++)
phi[i]=phi[i]*2+1;
}
int main()
{
int t=read(),cas=0;
Phi();
while (t--)
{
int n=read();
printf("%d %d %d\n",++cas,n,phi[n]);
}
return 0;
}