浦口网站建设,网站开发成本评估,微信小程序定制团队,网站建设实训 考核要求买不到的数目 小明开了一家糖果店。 他别出心裁#xff1a;把水果糖包成4颗一包和7颗一包的两种。 糖果不能拆包卖。 小朋友来买糖的时候#xff0c;他就用这两种包装来组合。 当然有些糖果数目是无法组合出来的#xff0c;比如要买 10 颗糖。 你可以用计算机测试一下#…买不到的数目 小明开了一家糖果店。 他别出心裁把水果糖包成4颗一包和7颗一包的两种。 糖果不能拆包卖。 小朋友来买糖的时候他就用这两种包装来组合。 当然有些糖果数目是无法组合出来的比如要买 10 颗糖。 你可以用计算机测试一下在这种包装情况下最大不能买到的数量是17。 大于17的任何数字都可以用4和7组合出来。 本题的要求就是在已知两个包装的数量时求最大不能组合出的数字。 输入格式 两个正整数 n,m表示每种包装中糖的颗数。 输出格式 一个正整数表示最大不能买到的糖数。 数据范围 2≤n,m≤1000保证数据一定有解。 输入样例
4 7输出样例
17
前提条件给定ab若dgcd(a,b)1即最大公约数1,则一定不能凑出最大数。
因为若d1则a和b一定是d的倍数那么a和b凑出来的数也肯定是d的倍数所以一定不会存在一个最大数使得这个数之后的数字都能被a和b凑出来
结论 如果 a,b均是正整数且互质那么由 axby,x≥0,y≥0不能凑出的最大数是 (a−1)(b−1)−1这是定理证明很难记住定理即可。
互质最大公约数为1
裴蜀定理若a,b的最大公约数为d怎一定存在两个整数p,q使得apbqd只要ab互质则一定有解
若ab互质则一定存在apbq1两边同时乘以m apmbqmm am-q)p(bmp)qm
方法1. 暴力搜索打表找规律会超时AC50% 当要凑的数字减到0的时候说明凑出来了 先尝试用p来凑要凑的数字变成m-p 再尝试用q来凑要凑的数字变成m-q 如果都凑不出来则返回false
#includecstdio
#includecstring
#includealgorithm
#includeiostream
using namespace std;
int n,m,ans;
bool dfs(int m,int p,int q){if(!m) return true;if(mpdfs(m-p,p,q)) return true;if(mqdfs(m-q,p,q)) return true;return false;
}
int main(){cinnm;for(int i1;i1000;i){if(!dfs(i,n,m)) ansi;}coutansendl;return 0;
}
根据这个暴力搜索我们可以打表找规律如下
3 2 1
3 4 5
3 5 7
3 7 11
3 8 13
大致可以发现规律为n3时m1ans2 故ans2mx 代入数据得x-3 推得公式为ans2m-3;(n3) 同理多推几个公式
4 7 17
4 9 23
4 11 29
ans3m-4(n4) 最后整理得到大致公式ans(n-1)*(m-1)-1.
方法2.利用公式直接输出答案p-1)(q-1)-1
#includecstdio
#includecstring
#includeiostream
#includealgorithm
using namespace std;
int n,m;
int main(){cinnm;cout(n-1)*(m-1)-1endl;return 0;
}