Coin HDU

来源:互联网 发布:国际淘宝怎么开 编辑:程序博客网 时间:2024/05/19 22:54

传送门

题目大意:两个素数可以表示n大的所有数,比如:比23大的所有的整数都可以用5和7 表示。那么5和7就可以表示比23大的所有的整数。给两个素数求出这个n。

公式证明:

设所求为n,那么n+a、n+b可以用a、b线性表出,而n不可。
所以 n+a=x1*a+y1*b,n+b=x2*a+y2*b
所以 n=(x1-1)*a+y1*b n=x2*a+(y2-1)*b
因为n不能被线性表出,所以x1=0,y2=0
所以 n+a=y1*b,n+b=x2*a
所以 n+a=y1*b,n+a=(x2+1)*a-b
所以 (x2+1)*a-b是b的倍数
因为a、b互质,所以(x2+1)是b的倍数
因为求最小的n,所以选最小的x2值,所以取(x2+1)为b
所以 n+a=b*a-b,n=a*b-a-b

证毕


数论题永远都是这么坑


AC代码:

#include <iostream>#include <cstdio>using namespace std;int main(){int t;scanf("%d", &t);long long a, b;while(t--){scanf("%lld%lld", &a, &b);printf("%lld\n", a*b-a-b);}return 0;}


原创粉丝点击