• 【蓝桥杯】买不到的数目


    买不到的数目

    题目:

    小明开了一家糖果店。他别出心裁:把水果糖包成4颗一包和7颗一包的两种。糖果不能拆包卖。

    小朋友来买糖的时候,他就用这两种包装来组合。当然有些糖果数目是无法组合出来的,比如要买 10 颗糖。

    你可以用计算机测试一下,在这种包装情况下,最大不能买到的数量是17。大于17的任何数字都可以用4和7组合出来。

    本题的要求就是在已知两个包装的数量时,求最大不能组合出的数字。

    输入:

    两个正整数,表示每种包装中糖的颗数(都不多于1000)

    要求输出:

    一个正整数,表示最大不能买到的糖数

    例如:

    用户输入:

    4 7

    程序应该输出:

    17

    再例如:

    用户输入:

    3 5

    程序应该输出:

    7

    题目分析:

    观察题目,将题目抽象为有两个正整数a、b,可以组合成任意线性组合ax+by,x、y非负,求最大不能组合数。

    由于不能组合而成的数我们不清楚公式,所以从可组合数入手分析。将可组合数设为c,那么c = ax + by。其中,x和y在题目中理解为两种不同包装的水果糖的包数。

    这里需要导入数论中的一个定理:假设有两个正整数a、b,若它们的最大公约数gcd(a, b)不为1,那么它们的线性组合一定是gcd(a, b)的倍数。即它们不存在最大不可组合数,因此a、b一定互质。

    现在,我们需要从一个数论的规律反证。

    结论:自然数a、b互质,则不能表示为ax + by(x、y为非负整数)的最大整数是ab – a – b。

    证明:(反证法)

    当a或b为1的情况下容易证明,因此以下证明当a > 1且b > 1的情况。

    假设ab – a – b = ax + by,那么ab = (x + 1)a + (y + 1)b。

    左式为a的倍数,等式若成立,那么右式也是a的倍数,那么需要(y + 1)也是a的倍数,等式不成立。

    到这里已经证明了ab – a – b是一个不可组合数,但没有证得是最大不可组合数。

    再次利用反证法,证明大于ab – a – b的数都可以被组合而成:

    若存在c > ab – a – b,即存在ab – a – b + t = ma + nb(m、n、t为非负整数),得到两个方程如下:

    1. t = (m + 1 - b)a + (n + 1)b

    2. t = (m + 1)a + (n + 1 - a)b

    此时,右式可以表示为一正一负任意数、一负一正任意数、两个都是正整数的情况。

    又由裴蜀定理可知,gcd(a, b) = sa + tb(a、b为正整数,s、t为整数),其中gcd(a, b)大于0,s、t不可能同时为负,所以方程1、2可以表示为任意gcd(a, b)的倍数,又因为a、b互质,gcd(a, b) = 1,因此可以t表示任意大于0的整数,证得等式ab – a – b + t = ma + nb成立!

    总体思路是证明两个命题:

    1. ab - a - b被不可组合而成

    2. 大于ab - a - b的所有数都可以被组合而成

    解题代码:

    #include <stdio.h>
    
    int main()
    {
    	long long a, b;
    	
    	scanf("%lld %lld", &a, &b);
    	printf("%lld", a * b - a - b);
    	
    	return 0;
    }
    
  • 相关阅读:
    Aboat join
    ajax 弹出层
    如何使用 BindingSource 绑定 ListBox,同时解决绑定 List<T> 后修改数据源不能同时刷新界面显示的问题
    Javascript 弹出层
    vs 2008 90 天 试用 破解
    c#的as类型转换详细理解,欢迎园友拍砖。
    Linux下定时切割Mongodb数据库日志并删除指定天数前的日志记录
    纠结了一天多的问题arithmetic overflow error converting expression to data type datetime
    关于开发Office2003AddIn问题
    为什么Scrum不行。。
  • 原文地址:https://www.cnblogs.com/tuzkizki/p/13638950.html
Copyright © 2020-2023  润新知