题目:
【问题描述】 小凯手中有两种面值的金币,两种面值均为正整数且彼此互素。每种金币小凯都有 无数个。在不找零的情况下,仅凭这两种金币,有些物品他是无法准确支付的。现在小 凯想知道在无法准确支付的物品中,最贵的价值是多少金币?注意:输入数据保证存在 小凯无法准确支付的商品。 【输入格式】 输入文件名为 math.in。 输入数据仅一行,包含两个正整数 a 和 b,它们之间用一个空格隔开,表示小凯手 中金币的面值。
【输出格式】 输出文件名为 math.out。 输出文件仅一行,一个正整数 N,表示不找零的情况下,小凯用手中的金币不能准 确支付的最贵的物品的价值。
【输入输出样例 1】 math.in math.out 3 7
11
见选手目录下的 math/math1.in 和 math/math1.ans。 【输入输出样例 1 说明】 小凯手中有面值为3和7的金币无数个,在不找零的前提下无法准确支付价值为1、 2、4、5、8、11 的物品,其中最贵的物品价值为 11,比 11 贵的物品都能买到,比如:
12 = 3 * 4 + 7 * 0 13 = 3 * 2 + 7 * 1 14 = 3 * 0 + 7 * 2 15 = 3 * 5 + 7 * 0 ……
【输入输出样例 2】 见选手目录下的 math/math2.in 和 math/math2.ans。
【数据规模与约定】 对于 30%的数据: 1 ≤ a,b ≤ 50。 对于 60%的数据: 1 ≤ a,b ≤ 10,000。 对于 100%的数据:1 ≤ a,b ≤ 1,000,000,000。
思路:
主要来源于数学公式,没有学过公式的一般看不出来。
注:long long取值范围-2^63——2^63-1
long取值范围-2^31——2^31-1
int取值范围-2^31——2^31-1
#include<iostream> #include<cstdio> using namespace std; int main(){ long long a,b,c=0; cin>>a>>b; c=a*b-a-b; cout<<c<<endl; return 0; }