博客
关于我
强烈建议你试试无所不能的chatGPT,快点击我
数论 - 欧拉函数的运用 --- poj 3090 : Visible Lattice Points
阅读量:6245 次
发布时间:2019-06-22

本文共 2357 字,大约阅读时间需要 7 分钟。

Visible Lattice Points
Time Limit: 1000MS   Memory Limit: 65536K
Total Submissions: 5636   Accepted: 3317

Description

A lattice point (xy) in the first quadrant (x and y are integers greater than or equal to 0), other than the origin, is visible from the origin if the line from (0, 0) to (xy) does not pass through any other lattice point. For example, the point (4, 2) is not visible since the line from the origin passes through (2, 1). The figure below shows the points (xy) with 0 ≤ xy ≤ 5 with lines from the origin to the visible points.

Write a program which, given a value for the size, N, computes the number of visible points (xy) with 0 ≤ xy ≤ N.

Input

The first line of input contains a single integer C (1 ≤ C ≤ 1000) which is the number of datasets that follow.

Each dataset consists of a single line of input containing a single integer N (1 ≤ N ≤ 1000), which is the size.

Output

For each dataset, there is to be one line of output consisting of: the dataset number starting at 1, a single space, the size, a single space and the number of visible points for that size.

Sample Input

4245231

Sample Output

1 2 52 4 133 5 214 231 32549

Source

 

 

 

Mean: 

 在第一象限中,输入一个n,然后要你统计在(0<=x<=n,0<=y<=n)的范围内,有多少可视点。

所谓的可视点,即:从(0,0)出发到达(x1,y1),中间未与任何整点相交的点。

analyse:

 通过分析,我们会发现:只要x和y互质,那么(x,y)就是可视点。我们只要求得[0,0]~[x,y]内满足x和y互质的点(x,y)的个数,那么问题就可迎刃而解。欧拉函数就是用来解决小于n的数中有多少个数与n互质。

Time complexity:O(n)

 

Source code:

 

// Memory   Time// 1347K     0MS// by : Snarl_jsb// 2014-09-12-22.35#include
#include
#include
#include
#include
#include
#include
#include
#include
#include
#include
#include
#define N 1000010#define LL long longusing namespace std;int gcd(int a,int b){ return b?gcd(b,a%b):a;}inline int lcm(int a,int b){ return a/gcd(a,b)*b;}int eular(int n) 求1..n-1中与n互质的数的个数{ int ret=1,i; for (i=2;i*i<=n;i++) if (n%i==0){ n/=i,ret*=i-1; while (n%i==0) n/=i,ret*=i; } if (n>1) ret*=n-1; return ret;}int main(){// freopen("C:\\Users\\ASUS\\Desktop\\cin.cpp","r",stdin);// freopen("C:\\Users\\ASUS\\Desktop\\cout.cpp","w",stdout); int t,Cas=1; cin>>t; while(t--) { int n; cin>>n; LL ans=0; for(int i=1;i<=n;i++) { ans+=eular(i); } printf("%d %d %d\n",Cas++,n,ans*2+1); } return 0;}

  

转载于:https://www.cnblogs.com/crazyacking/p/3969260.html

你可能感兴趣的文章
《Python数据科学实践指南》——0.4节一个简单的例子
查看>>
《树莓派学习指南(基于Linux)》——本章小结
查看>>
中国自主操作系统COS宣传片:很好很强大
查看>>
《SolidWorks 2017中文版机械设计从入门到精通)》——2.2 草图命令
查看>>
Google 开发新的开源系统 Fuchsia
查看>>
社区不是请客吃饭(二)不出国门也能参与OpenStack Summit
查看>>
FreeDOS 诞生二十周年
查看>>
新的 OpenID 基金会的董事会领导
查看>>
第十天:估算活动持续时间,类比估算,参数估算,自下而上估算,三点估算解析表...
查看>>
为什么我要垂直对齐代码(你也要如此!)
查看>>
《ANSYS Workbench 16.0超级学习手册》——1.4 本章小结
查看>>
微软确认周二更新补丁破坏了 Windows 10 重置功能
查看>>
《Cisco防火墙》一8.4 入站NAT分析
查看>>
流处理框架 Samza 成为 Apache 基金会顶级项目
查看>>
《腾讯iOS测试实践》一一3.4 测试原则
查看>>
结对编程 VS 代码审查:对比开发者文化
查看>>
用消除重复的加密工具备份数据
查看>>
《电路分析导论(原书第12版)》一1.4.1 算法语言
查看>>
PNG 图片处理库 libpng 曝出漏洞,已初步修复
查看>>
Go 开发的 IM 和推送服务 goim
查看>>