最大公约数的运用

本文介绍了一种高效计算线段上除两端点外格点数量的方法,利用最大公约数概念,避免了传统穷举法的时间复杂度问题。

摘要生成于 C知道 ,由 DeepSeek-R1 满血版支持, 前往体验 >

转载自http://www.ithao123.cn/content-3667419.html

线段上格点的个数

给定平面上的两个格点P1(x1,y1)  和P2(x2,y2), 线段上P1P2上,除P1P2以外一共有多少格点

虽然可以用穷举法,遍历min(x1,x2)xmax(x1,x2)min(y1,y2)ymax(y1,y2)      的格点可以得到正确答案,但是复杂度确实O(|x1x2|×|y1y2|)      ,其实这个题的答案是|x1x2||y1y2|    的最大公约数减去1。(注意,|x1x2|=0|y1y2|=0   时,答案为0)

原因,首先看一下|x1x2||y1y2|    的最大公约数代表的是啥? 其实可以看成 在横向和竖向的最大的公共等分数, 比如 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),就是本体所要求的点。这就是为什么这个题的答案是|x1x2||y1y2|     的最大公约数减去1。

那这个题可以转换为求最大公约数的问题,最大公约数一般使用辗转相除法

辗转想法的原理: 
如果有两个自然数a和b(a>b), 可以写成a=k×b+c 
情况1:如果c=0,那么gcd(a,b)=b 
情况2:如果c0   , 那么gcd(a,b)=gcd(b,c)

评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值