zl程序教程

您现在的位置是:首页 >  后端

当前栏目

[第四届蓝桥杯省赛C++A组]买不到的数目

C++ 蓝桥 省赛 数目 第四届
2023-09-11 14:18:49 时间

来源: 第四届蓝桥杯省赛C++A组

算法标签:数学

题目描述

小明开了一家糖果店。

他别出心裁:把水果糖包成4颗一包和7颗一包的两种。

糖果不能拆包卖。

小朋友来买糖的时候,他就用这两种包装来组合。

当然有些糖果数目是无法组合出来的,比如要买 10 颗糖。

你可以用计算机测试一下,在这种包装情况下,最大不能买到的数量是17。

大于17的任何数字都可以用4和7组合出来。

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

输入格式

两个正整数 n,m,表示每种包装中糖的颗数。

输出格式

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

数据范围

2≤n,m≤1000,

保证数据一定有解。

输入样例:

4 7

输出样例:

17

思路

(裴蜀定理) O(1)
裴蜀公式:p*q-p-q
引理:给定a,ba,b,若d=gcd(a,b)>1d=gcd(a,b)>1,则一定不能凑出最大数
结论:
如果 a,ba,b 均是正整数且互质,那么由 ax+by,x≥0,y≥0ax+by,x≥0,y≥0 不能凑出的最大数是 (a−1)(b−1)−1(a−1)(b−1)−1。

C++ 代码

#include<iostream>

using namespace std;

int main()
{
    int a,b;
    cin>>a>>b;
    cout<<a*b-a-b;
    return 0;
}

20201013

#include<iostream>

using namespace std;

#define f(a,b) (a*b-a-b)
int main(){
        int a,b;
        cin>>a>>b;

        cout<<f(a,b);
        return 0;
}