Visible Lattice Points(规律题)【数学规律】
Visible Lattice Points
| Time Limit: 1000MS | Memory Limit: 65536K | |
| Total Submissions: 9031 | Accepted: 5490 |
Description
A lattice point (x, y) 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 (x, y) 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 (x, y) with 0 ≤ x, y ≤ 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 (x, y) with 0 ≤ x, y ≤ 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
4
2
4
5
231
Sample Output
1 2 5
2 4 13
3 5 21
4 231 32549
思路:
问题:从原点出发的射线从x轴开始逆时针旋转,如果射线穿过某点则这个点 则该点可以被看到 求可以看到的点的个数总和
知道这个题是有规律(找到斜率相同且最先出现的点)直接看 看了好久也没找到,最后自己索性把所有要被与原点相连接的点打印出来 就可以看出来了
输出如图:
三个值分别表示:
x y k

规律:如果x是奇数(例如x=7) 需要满足gcd(x,y)==1的点 若是偶数同理
即:x与y互质 (佩服同学能直接看出来互质……)
下面是找规律的代码:
#include<stdio.h>
#include<algorithm>
using namespace std;
typedef long long LL;
const int MAX=1e6;
struct node{
double count2;
LL x;
LL y;
}num[MAX+5];
struct node1{
LL x1;
LL y1;
double num3;
}edge[MAX+5];
bool cmp(node a,node b)
{
if(a.count2==b.count2){
return a.x<b.x;
}
else{
return a.count2<b.count2;
}
}
bool cmp1(node1 a,node1 b)
{
if(a.x1!=b.x1){
return a.x1<b.x1;
}
return a.y1<b.y1;
}
int main()
{
LL count,T,n;
scanf("%lld",&T);
for(LL k=1;k<=T;k++){
scanf("%lld",&n);
count=0;
for(LL i=2;i<=n;i++){
for(LL j=1;j<i;j++){
num[count].count2=(j*1.0)/(i*1.0);
num[count].x=i;
num[count].y=j;
count++;
}
}
sort(num,num+count,cmp);
LL count1=0,count3=0;
for(LL i=0;i<count;i++){
if(num[i].count2!=num[i-1].count2){
edge[count3].x1=num[i].x;
edge[count3].y1=num[i].y;
edge[count3++].num3=num[i].count2;
// printf("*%lld %lld %.2lf\n",num[i].x,num[i].y,num[i].count2);
count1++;
}
}
sort(edge,edge+count3,cmp1);
for(int i=0;i<count3;i++){
printf("*%lld %lld %.2lf\n",edge[i].x1,edge[i].y1,edge[i].num3);
}
if(n==1){
printf("%lld 1 3\n",k);
}
else{
LL sum=3;
sum+=count1*2;
printf("%lld %lld %lld\n",k,n,sum);
}
}
return 0;
}
AC代码:
(找规律接近100行 但AC却只是40行左右)
#include<stdio.h>
typedef long long LL;
const int MAX=1e5;
int gcd(int a,int b)
{
if(b==0){
return a;
}
return gcd(b,a%b);
}
int main()
{
LL num[MAX+5]={0},T;
num[1]=1;
for(int i=2;i<=1000;i++){
LL count=0;
if(i%2==0){
for(int j=1;j<i;j+=2){
if(gcd(i,j)==1){
count++;
}
}
}
else{
for(int j=1;j<i;j++){
if(gcd(i,j)==1){
count++;
}
}
}
num[i]=num[i-1]+count;
}
scanf("%lld",&T);
for(LL k=1;k<=T;k++){
LL n,sum=0;
scanf("%lld",&n);
sum+=(num[n]*2+1);
printf("%lld %lld %lld\n",k,n,sum);
}
return 0;
}
Visible Lattice Points(规律题)【数学规律】的更多相关文章
- SPOJ VLATTICE Visible Lattice Points (莫比乌斯反演基础题)
Visible Lattice Points Consider a N*N*N lattice. One corner is at (0,0,0) and the opposite one is at ...
- poj 3060 Visible Lattice Points
http://poj.org/problem?id=3090 Visible Lattice Points Time Limit: 1000MS Memory Limit: 65536K Tota ...
- SPOJ 7001. Visible Lattice Points (莫比乌斯反演)
7001. Visible Lattice Points Problem code: VLATTICE Consider a N*N*N lattice. One corner is at (0,0, ...
- spoj 7001. Visible Lattice Points GCD问题 莫比乌斯反演
SPOJ Problem Set (classical) 7001. Visible Lattice Points Problem code: VLATTICE Consider a N*N*N la ...
- Visible Lattice Points (莫比乌斯反演)
Visible Lattice Points 题意 : 从(0,0,0)出发在(N,N,N)范围内有多少条不从重合的直线:我们只要求gcd(x,y,z) = 1; 的点有多少个就可以了: 比如 : 点 ...
- spoj 7001 Visible Lattice Points莫比乌斯反演
Visible Lattice Points Time Limit:7000MS Memory Limit:0KB 64bit IO Format:%lld & %llu Su ...
- 数论 - 欧拉函数的运用 --- poj 3090 : Visible Lattice Points
Visible Lattice Points Time Limit: 1000MS Memory Limit: 65536K Total Submissions: 5636 Accepted: ...
- Spoj 7001 Visible Lattice Points 莫比乌斯,分块
题目:http://acm.hust.edu.cn/vjudge/problem/viewProblem.action?id=37193 Visible Lattice Points Time L ...
- P8 Visible Lattice Points
P8 Visible Lattice Points Time Limit:1000ms, Memory Limit:65536KB Description A lattice point (x ...
随机推荐
- 论文阅读:Reducing Transformer Depth On Demand With Structured Dropout
Introduction 这篇paper是做Transformer压缩的,但其实bert的核心也就是transformer,这篇paper的实验里也做了bert的压缩.作者的主要工作是提出了Layer ...
- IDEA提高开发效率的7个插件
IDEA提高开发效率的7个插件 1. 多行编辑 先来体验一下从xml文件拷贝字段新建实体对象 一般我们为了新建多表连接后映射的 ResultMap ,耗费不少时间,那么我们就来试一试这个多行编辑 表字 ...
- MySQL常见6个考题在实际工作中的运用
题目一 MyISAM和InnoDB的区别,什么时候选择MyISAM 参考回答 InnoDB是目前MySQL主流版本(5.6.5.7.8.0)默认的存储引擎,支持事务.外键.行级锁,对于并发条件下要求数 ...
- [不得不知道系列]Java线程面试你不得不知道的基础知识一
Java内存管理面试指南一 Java基础面试指南一 Java基础面试指南二 Java基础面试指南三 Java基础面试指南四 Java线程面试指南一 Java线程面试指南二 Redis面试指南一 Kaf ...
- .NET CORE 依赖注入 实践总结
知识点回顾 依赖包. Microsoft.Extensions.DependencyInjection.Abstractions 核心对象和方法. IServiceCollection.注入对象的容器 ...
- Python 每日一练(2)
引言 我又双叒叕的来啦,新博客的第二篇文章,这次是继之前公众号上每日一练的第二个,这次是专题实对于文件的一些处理的练习 主要有以下几类: 1.实现英文文章字频统计 2.统一剪裁某一指定目录下的所有图片 ...
- WebForms UnobtrusiveValidationMode 需要“jquery”ScriptResourceMapping 异常详细信息: System.InvalidOperationException: WebForms UnobtrusiveValidationMode 需要“jquery”ScriptResourceMapping。请添加一个名为 jquery (区分大小写)的
WebForms UnobtrusiveValidationMode 需要“jquery”ScriptResourceMapping.请添加一个名为 jquery (区分大小写)的 ScriptRes ...
- Flask 蓝图进行路由分发.md
Flask 蓝图进行路由分发 Flask虽然说是一个轻型web框架,但也总不能用一个py文件写完全部view吧,所以我们要把路由分到不同的py文件中.这就需要用到蓝图了. 一 创建一个py文件 用于处 ...
- 使用python的socket模块进行网络编程
使用socket编程可以分成基于tcp和基于udp,tcp和udp两者最主要的区别是有无面向连接. 基于tcp的socket流程:
- django-CBV刨析、模板层
今日内容概要 CBV源码剖析 模版层 模版语法传值 模版语法之过滤器 模版语法之标签 自定义过滤器.标签及inclusion_tag 模版的继承 模版的导入 FBV与CBV ""& ...