HDU 2662 Coin

来源:互联网 发布:w10网络连接图标不见了 编辑:程序博客网 时间:2024/06/11 08:12

题目链接:http://acm.hdu.edu.cn/showproblem.php?pid=2662

怎么说呢,这道题逻辑推理不错,可以找规律,也可以证明结论。我举了几个例子后,推出了公式....

题意:给你两种素数,每种素数的个数不限,问你哪个数字后所有的数字都可以通过这两种素数组合构成

比如:

3 5

那么7数字后的所有数字都可以由这两种素数组合成 

5 7

一个一个的推的话,我们会发现是35

7 9

同样一个一个的推,虽然比较麻烦,不过没办法。我们会发现47以后的所有数字都可以组合构成

下面是我的AC代码:

#include<iostream>
#define ll long long
using namespace std;
int main()
{
    ll t,n,m;
    cin>>t;
    while(t--)
    {
        ll ans;
        cin>>n>>m;
        ans=n*m-m-n;
        cout<<ans<<endl;
    }
    return 0;
}

关于公式:我们在这里证明一下

设所求为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
证毕

0 0
原创粉丝点击