题意:
输入两个正整数a,b,(a,b<65000)表示两张邮票的面值,问有多少种情况不能由这两张邮票来贴。
思路:
①a,b互质,结果为有限个。输出个数为(a-1)(b-1)/2 ,证明略
②a,b不互质,结果为无穷个。输出“infinite”
代码:
#include <bits/stdc++.h>
using namespace std;
#define ll long long
ll exgcd(ll a, ll b, ll& x, ll& y)
{
if(b==0)
{
x=1;
y=0;
return a;
}
ll r=exgcd(b, a%b, y, x);
y=y-(a/b)*x;
return r;
}
int main()
{
ll a, b;
ll x, y;
while(~scanf("%lld%lld", & a, & b))
{
ll gcd=exgcd(a,b, x, y);
if(gcd==1)
{
printf("%lld\n", (a-1)*(b-1)/2);
}
else
printf("infinite\n");
}
return 0;
}