swustoj-1212(凑硬币)

来源:互联网 发布:福州软件职业技术学院 编辑:程序博客网 时间:2024/04/27 15:00

小Y有一朋友有很多硬币,由于实在太多,我们就假设有无限个。某天,他答应给小Y其中两种面值的硬币,数量不限, 
现在小Y想知道这两种硬币能凑出哪些面值,不能凑出哪些面值,估计准备去逛商场了吧。 
Description
第一行输入一个整数T,表示测试数据组数,约100组 
接下来T行每行输入两个不同的整数a,b(1<=a,b<=100000),表示两种不同面值的硬币。
Input
为了简化问题,对于每组数据,你只需要输出小Y用得到的两种硬币不能凑出的面值的个数。 
如果有无限个,则输出“infinite!”(不包括引号)。 
Output
1
2
3
1
2 5
Sample Input
1
2
Sample Output
样例解释:2和5不能凑出的面值只有1、3。 
换行\r\n

/*题解:如果 gcd(a,b)!=1,答案是无限的;否则ans = (a-1)*(b-1)/2;*/#include<stdio.h>#include<iostream>#include<algorithm>#include<math.h>#include<stdlib.h>#include<string.h>using namespace std;#define LL long long int#define MOD 1e9+7LL gcd(LL a,LL b){return a%b != 0 ? gcd(b, a%b): b;}int main(){long long int a, b;int t;cin >> t;while (t--){cin >> a >> b;//cout << gcd(a, b) << endl;if (gcd(a, b) != 1){cout << "infinite!\r\n";}else{cout << (a - 1)*(b - 1) / 2 << "\r\n";}}return 0;}