2018-07-01-HDOJ-2662-coin

学习自:【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;

}

你可能感兴趣的:(2018-07-01-HDOJ-2662-coin)