使用最大公约数求线段上格点的个数
来源:互联网 发布:光盘数据恢复软件 编辑:程序博客网 时间:2024/06/02 02:10
给定平面上的两个格点P1(x1,y1)和P2(x2,y2),线段上P1P2上,除P1和P2以外一共有多少格点
虽然可以用穷举法,遍历min(x1,x2)≤x≤max(x1,x2)且min(y1,y2)≤y≤max(y1,y2)的格点可以得到正确答案,但是复杂度确实O(|x1−x2|×|y1−y2|),其实这个题的答案是|x1−x2|和|y1−y2|的最大公约数减去1。(注意,|x1−x2|=0且|y1−y2|=0时,答案为0)
原因,首先看一下|x1−x2|和|y1−y2|的最大公约数代表的是啥? 其实可以看成 在横向和竖向的最大的公共等分数, 比如 6 的等分点可以是 1:1:1:1:1:1分成6份 ,也可以是 2:2:2分成3份,或者是 6,只有1份。(其实对应的是 6能被6,3,1整除) 那么 6和9的最大公共等分数是3,即6分为 2:2:2 , 9分为3:3:3. 那么边长为6和9的矩形,按照这样分会是什么情况呢?
这里写图片描述
通过上图可以看出,大矩形的对角线正好经过 (2,3),(4,6),(6,9) 除开(6,9),就是本体所要求的点。这就是为什么这个题的答案是|x1−x2|和|y1−y2|的最大公约数减去1。
那这个题可以转换为求最大公约数的问题,最大公约数一般使用辗转相除法
阅读全文
0 0
- 使用最大公约数求线段上格点的个数
- 编程题-线段上格点的个数-最大公约数
- 求2个数的最大公约数
- 求2个数的最大公约数
- 求二个数的最大公约数
- 求4个数的最大公约数
- 求4个数的最大公约数
- 求多个数的最大公约数
- 求2个数的最大公约数
- 求2个数的最大公约数
- 求2个数的最大公约数
- 求2个数的最大公约数
- 求4个数的最大公约数
- 求多个数的最大公约数
- 求2个数的最大公约数
- 求N个数的最大公约数
- 求2个数的最大公约数--欧几里德算法
- 求多个数的最小公倍数或最大公约数
- JS常用正则表达式验证总结。
- python学习之运维应用
- 网络上找的JS日期格式化简洁版
- STL学习笔记10— —容器的选用
- [RK3288][Android6.0] 开发者选项中的Strict mode功能
- 使用最大公约数求线段上格点的个数
- UVA 11827 Maximum GCD
- FreeBSD代码目录说明
- SpringMVC中MessageSource的获取方法
- oracle的sql语句的练习题及答案(员工表+部门表)
- webpack编译多页面vue项目的配置问题
- js格式化json/xml格式
- 复杂链表的复制【每日一题】
- 学习贴 量化小白成长记---基础学习篇