整数表示法
题目详情:
我们知道,如果X,Y互素时aX+bY可以表示任意整数(其中a,b为整数)。如果设置条件X,Y>0,并且aX+bY>=0时,求能表示的整数集中连续的整数最小的是多少?
例如输入X=3,Y=4.整数集为0,3,4,6,7,8,9……则输出6;
输入1行X和Y,输出一行表示最小整数;
其中X,Y为32位整数且互素
答题说明:
测试用例
5 6
20
1 2
0
2 3
/* 整数表示法 题目详情: 我们知道,如果X,Y互素时aX+bY可以表示任意整数(其中a,b为整数)。如果设置条件X,Y>0,并且aX+bY>=0时,求能表示的整数集中连续的整数最小的是多少? 例如输入X=3,Y=4.整数集为0,3,4,6,7,8,9……则输出6; 输入1行X和Y,输出一行表示最小整数; 其中X,Y为32位整数且互素 答题说明: 测试用例 5 6 20 1 2 0 2 3 给定X, Y(互素),求不能表示成aX+bY且最大的整数n(其中a,b>=0),输出n+1。 假设任意正整数n = aX+ bY。 当0<= a <= Y-1时, n的表达式唯一,即a, b的值唯一。 这时如果a增加Y那么b就减少X,如果a减少Y那么b就增加X, 如果此时b<0,那么n就不能被表示,因为b<0, 要使b>=0,那么b就至少要增加X, 对应的a至少要减少Y,这样a就小于0了,即a>=0 和 b>=0不可兼得。 不能表示成aX+bY且最大的整数n(其中a,b>=0)的数就是在区间0<=a<=Y-1中, a取最大b也取最大. 即a = Y-1, b=-1, 此时n = (Y-1)X + (-1)Y = XY - X - Y, 输出n + 1 = (X - 1) * (Y -1). */ #include<iostream> #include<stdio.h> using namespace std; int main() { __int64 x,y; while(scanf("%I64d%I64d",&x,&y)!=EOF) { printf("%I64d\n",(x-1)*(y-1)); } }