本题有一个结论:
算法
(数论)
结论:
如果 a,b 均是正整数且互质,那么由 ax+by,x≥0,y≥0不能凑出的最大数是 ab−a−b
下面给出证明:
首先证明 ab−a−b不能被 ax+bx,x≥0,y≥0a表示出。
反正法,假设 ab−a−b=ax+by那么 ab=a(x+1)+b(y+1)由于 a|ab,a|a(x+1)所以 a|b(y+1),由于 a,b 互质,所以 a|(y+1),由于 y≥0,所以 a<=y+1,所以 b(y+1)≥ab。同理可得 a(x+1)≥ab,所以 a(x+1)+b(y+1)≥2ab>ab,矛盾。
证明 ab−a−b+d,d>0 一定可以表示成 ax+by,x,y≥0的形式
#include<bits/stdc++.h> using namespace std; int n,m; //求最大公约数 int gcd(int a,int b){ if(b==0) return a; else return gcd(b,a%b); } int main(){ cin >> n >> m; int lcm = n /gcd(n,m) * m;//最小公倍数 cout << lcm - n - m; return 0; }