洛谷:P3951
OJ: I3951
费罗贝努斯问题(Frobenius Coin Problem)是数论中的一个经典问题,主要研究如何用给定的一组互质的正整数(通常称为“硬币面值”)来表示其他整数。具体来说,问题通常包括以下几个方面:
给定一组互质的正整数 a1,a2,…,an,这些整数代表不同面值的硬币,且每种面值的硬币数量无限。费罗贝努斯问题主要研究以下两个问题:
对于只有两个互质正整数 a 和 b的情况,费罗贝努斯问题有一个简单的闭式解:g(a,b)=ab−a−b
这个结果意味着,对于两个互质的正整数 a 和 b,最大的无法表示的正整数是 ab−a−b。例如,对于 a=3 和 b=7,最大不可表示数为 3×7−3−7=11,这与之前的编程题目示例相符。
简要证明如下:
代码实现:
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 | /**************************************************************** * Description: 2017年提高组第一题 小凯的疑惑 * Author: Alex Li * Date: 2024-09-20 18:19:46 * LastEditTime: 2024-10-01 14:14:08 ****************************************************************/ #include <iostream> using namespace std; int main() { // freopen("math.in","r",stdin); // freopen("math.out","w",stdout); int a, b; // 读入两个正整数 a 和 b cin >> a >> b; // 根据公式计算最大无法支付的金额 N = a * b - a - b int N = a * b - a - b; // 输出结果 cout << N << endl; return 0; } |