题面:
题目大意:
给出两个数字,判断这两个数字是否可以表示从某个数开始的所有的数字,如果可以表示则输出Finite, 不能表示就输出Infinite.
解题思路:
可以被表示的数字一定可以被写成这样的算式:ax + by;而ax + by % gcd(a, b) == 0;能被ax + by表示的数字一定对 % gcd(a, b) = 0, 否则则不能被其表示;那么如果gcd(a, b) > 1,则表示不管数字有多大,一定会有数字对gcd(a, b)取模会有余数,所以只有当gcd(a, b) = 1 的时候,才能表示后面所有的数字,所以当a 与 b互质的时候就表示后面所有的可以被染成白色,表示黑色的格子是有限的。否则不能。
证明:
代码一份:
#include <iostream>
#include <cstdio>
using namespace std;
inline int gcd(int a, int b) { return b == 0 ? a : gcd(b, a % b); }
int main(void) {
// freopen("in.txt", "r", stdin);
int T;
scanf("%d", &T);
while(T --) {
int a, b;
scanf("%d%d", &a, &b);
if(gcd(a, b) == 1) puts("Finite");
else puts("Infinite");
}
return 0;
}