传送门
题目大意:两个素数可以表示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;
}