首页 > 技术文章 > 分火腿

smallocean 2020-01-15 16:35 原文

假设把所有香肠接在一起想象成一根大香肠 总长度为 \(A\)

那不难想到,需要切\(m-1\)刀,则每隔\(\frac{A}{m}\)要切一刀,设\(y=\frac{A}{m}\)

设原来一根香肠长度为\(x\)\(x=\frac{A}{n}\)\(x\)的倍数不用切,不能算在答案里

所以现在问题变成\(m-1\)减去 \(x\)的倍数和\(y\)的倍数重合的个数

\(1\)\(A\)的正整数中,有多少数既是 \(x\) 的倍数,也是\(y\)的倍数.

很明显是\(A\)除以\(x\)\(y\)的最大公倍数

下面是数学处理,根据定理:最大公倍数等于:

\[\frac{x*y}{gcd(x,y)} \]

其中 \(gcd(x,y)\)\(x\)\(y\)最大公因子

代入\(x\)\(y\)的值

\[\frac{\frac{A^2}{n*m}}{gcd(\frac{A}{n},\frac{A}{m})} \]

上下同乘以\(\frac{n*m}{A}\)

\[\frac {A}{gcd(n,m)} \]

再用\(A\)除以最大公倍数

就是\(gcd(n,m)\)

结果就是\(m-1-gcd(n,m)\)

但是\(A\)也是\(x\)\(y\)的倍数,最后一个位置\(A\)是不需要切的,所以上式子减多了一个,加上\(1\)

结果:

\[m-gcd(n,m) \]

推荐阅读