矩形的对角线经过的小方格数量

前两天数学建模校内选拔赛的题目中,有一问是让求出最短路径以及经过的方格数,而最短路径是很多段折线,需要计算每段折线经过的方格数再加起来。

本来打算直接在程序里加几行代码计算的,后来发现可以直接推导出结论:

对于一个长度为 m m m,宽度为 n n n的矩形,均分成 m ∗ n m*n mn个小方格,则对角线经过的小方格数量为 m + n − ( m , n ) m+n-(m,n) m+n(m,n),其中 ( m , n ) (m,n) (m,n) m m m n n n的最大公约数。

在这里插入图片描述

证明:

①先考虑 m m m n n n互质的情况,即 ( m , n ) = 1 (m,n)=1 (m,n)=1时,由于对角线的斜率为 k = n m k=\frac{n}{m} k=mn为既约分数,显然对角线除了两个端点外不会经过内部格点。

而对角线与 m + 1 m+1 m+1条竖直线有 m + 1 m+1 m+1个交点,与 n + 1 n+1 n+1条水平线有 n + 1 n+1 n+1个交点,由于对角线的两个端点被重复计算,所以对角线与所以格线共有 m + 1 + n + 1 − 2 = m + n m+1+n+1-2=m+n m+1+n+12=m+n个交点。
在这里插入图片描述
而这 m + n m+n m+n个交点将对角线分为 m + n − 1 m+n-1 m+n1段,每一小段都与包含它的小方格一一对应,所以对角线共经过了 m + n − 1 m+n-1 m+n1个小方格。

②再考虑 m m m n n n不互质的情况,即 ( m , n ) = d > 1 (m,n)=d>1 (m,n)=d>1时,由于对角线的斜率为 k = n m = n / d m / d k=\frac{n}{m}=\frac{n/d}{m/d} k=mn=m/dn/d,所以对角线一共经过了 d d d个长为 m d \frac{m}{d} dm,宽为 n d \frac{n}{d} dn的小矩形。取长为 m d \frac{m}{d} dm,宽为 n d \frac{n}{d} dn的小矩形作为研究对象,每一个小矩形都是长宽互质的。使用①中的结论,对角线在每个小矩形中经过的小方格数为 m d + n d − 1 \frac{m}{d}+\frac{n}{d}-1 dm+dn1,所以一共经过了 d ∗ ( m d + n d − 1 ) = m + n − d d*(\frac{m}{d}+\frac{n}{d}-1)=m+n-d d(dm+dn1)=m+nd个小方格。

综合①②,对于一个长度为 m m m,宽度为 n n n的矩形,均分成 m ∗ n m*n mn个小方格,则对角线经过的小方格数量为 m + n − ( m , n ) m+n-(m,n) m+n(m,n),其中 ( m , n ) (m,n) (m,n) m m m n n n的最大公约数。

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值