有一条长阶梯若每步跨2阶则最后剩1阶;若每步跨3阶则最后剩2阶;若每步n跨5阶则最后剩4阶;若每步跨6阶则最后剩5阶;只有每次跨7阶则最后才正n好1阶不剩。写一个函数计算这样的阶梯最少有多少级台阶。基础题n函数原型:int-GetPhaseNum;
分析:
根据题意,可以列出以下方程组:
x ≡ 1 (mod 2)
x ≡ 2 (mod 3)
x ≡ 4 (mod 5)
x ≡ 5 (mod 6)
x ≡ 1 (mod 7)
其中 x 表示阶梯的台阶数。可以使用中国剩余定理求解,得到最小正整数解即为阶梯的最少级数。
代码实现:
int GetPhaseNum() { int a[] = {2, 3, 5, 6, 7}; int b[] = {1, 2, 4, 5, 1}; int M = 2 * 3 * 5 * 6 * 7; // 所有模数的乘积 int x = 0; for (int i = 0; i < 5; i++) { int Mi = M / a[i]; int Mi_inv = Inverse(Mi, a[i]); x = (x + Mi * Mi_inv * b[i]) % M; } return x; }
其中 Inverse 为求模数逆元的函数,可以使用扩展欧几里得算法实现。
原文地址: https://www.cveoy.top/t/topic/rG7 著作权归作者所有。请勿转载和采集!