POJ 3090 Visible Lattice Points (欧拉函数)
2015-02-10 13:04
447 查看
题目:http://poj.org/problem?id=3090
题意:在平面直角坐标系中,从(0,0)到(x,y)画一条线段,其中x>=0,y>=0。若这条线段上面没有其他的点,说明点(x,y)是可见的。求可见点的个数。
(0,0)
分析:列出点(x0,y0)到(0,0)的直线方程y=(y0/x0)*x,很容易想到就是求互质点的个数。由于对称,个数要X2,再加上一个点(0,0)。
代码:
题意:在平面直角坐标系中,从(0,0)到(x,y)画一条线段,其中x>=0,y>=0。若这条线段上面没有其他的点,说明点(x,y)是可见的。求可见点的个数。
(0,0)
分析:列出点(x0,y0)到(0,0)的直线方程y=(y0/x0)*x,很容易想到就是求互质点的个数。由于对称,个数要X2,再加上一个点(0,0)。
代码:
#include <iostream> #include <cstdio> using namespace std; #define MAXN 1001 long long phi[MAXN]; void dophi() { int i,j; for(i=1;i<MAXN;i++) phi[i]=i; for(i=2;i<MAXN;i+=2) phi[i]/=2; for(i=3;i<MAXN;i+=2) if(phi[i]==i) for(j=i;j<MAXN;j+=i) phi[j]=phi[j]/i*(i-1); } int main() { dophi(); for(int i=1;i<MAXN;i++) phi[i]+=phi[i-1]; int ncase,x,i; cin>>ncase; for(i=1;i<=ncase;i++) { cin>>x; cout<<i<<" "<<x<<" "; cout<<phi[x]*2+1<<"\n"; } return 0; }
相关文章推荐
- Poj 3090 Visible Lattice Points(欧拉函数)
- POJ 2478 Farey Sequence & POJ 3090 Visible Lattice Points (欧拉函数)
- POJ 3090 Visible Lattice Points 欧拉函数
- POJ 3090 Visible Lattice Points 欧拉函数
- Poj3090 Visible Lattice Points 欧拉函数求和
- POJ-3090 - Visible Lattice Points - 欧拉函数
- POJ3090_Visible Lattice Points【欧拉函数】
- (Relax 数论1.9)POJ 3090 Visible Lattice Points(欧拉函数的应用:计算前n项欧拉数之和)
- 【POJ】3090 Visible Lattice Points 欧拉函数
- POJ 3090 Visible Lattice Points(Farey数列&欧拉函数求和)
- POJ 3090 (欧拉函数) Visible Lattice Points
- 数论 - 欧拉函数的运用 --- poj 3090 : Visible Lattice Points
- POJ 3090-Visible Lattice Points(筛选法求欧拉函数)
- POJ 3090 Visible Lattice Points 【欧拉函数】
- POJ 3090 Visible Lattice Points 欧拉函数
- POJ 3090 Visible Lattice Points | 其实是欧拉函数
- 数论 - 欧拉函数的运用 --- poj 3090 : Visible Lattice Points
- POJ 3090 Visible Lattice Points (欧拉函数)
- poj 3090 Visible Lattice Points (欧拉函数)
- POJ 3090 Visible Lattice Points(欧拉函数)