学习自:【hdu - 2662 Coin】 - ismdeep - 博客园
题目大意:任意两个质数,存在一个数,大于这个数的所有数都可以用这两个质数的次叠加表示。
原证明:
设所求为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
证毕
对于链接中证明的最后一句有疑问:
小于n的可能可以表示,也有可能无法表示。大于n的一定可以表示,那么,不是应该求n的最大值吗?但是,可以证明k>=2时n必可以表示,k取0时n为负数,所以k只能取1.
代码:#includeint main()
{
int t;
scanf("%d",&t);
while(t--)
{
long long i,j;
scanf("%lld%lld",&i,&j);
printf("%lld\n",i*j-i-j);
}
return 0;
}