# codeforces 1245 A. A. Good ol' Numbers Coloring(数学)

# codeforces 1245 A. A. Good ol' Numbers Coloring(数学)_第1张图片

题目大意

给出a,b,按照图中要求染色,问黑色格子是否是有限个(Finite)。

解题思路

这是codeforce官方题解:

# codeforces 1245 A. A. Good ol' Numbers Coloring(数学)_第2张图片

根据染色要求,一个格子如果能表示成\(ax+by(a,b为整数)\)的形式,那么这个格子可以被染成白色。由数学知识可以知道ax+by % gcd(a,b) = 0​,反之任意不能被\(gcd(a,b)\)整除的数都不能表示成\(ax+by\)的形式。

接下来证明,任意一个数\(x^{'}(x^{'}>=a*b)\)能用两个互质的数\((a,b)\)来表示。

构造集合\(S = \{x^{'}, x^{'} - a, x^{'} - 2a, \dots, x^{'} - (b - 1) a\}\),如果集合中任何一个数被染成白色,那么按照染色队则\(x\)也被染成白色。首先\(S\)集合中有b个元素,假设这些元素都不能被\(b\)整除,(一不能整除b的数 对\(b\)的余数只有b-1个,集合中有b个数,对b取余就会产生b种余数)根据鸽巢定理,这个集合中一定存在两个不同的数\(x^{'} - sa, x^{'} - ta \in S (s对b取余之后余数一样,那么\((x^{'} - sa) - (x^{'} - ta) = a (t - s)\% b=0\),由于a,b互质,那么\(t-s\)整除\(b\),也就是\(t-s=kb,k>=1\),由于\(x^{'} - sa, x^{'} - ta \in S (s,可知\(t,所以\(t-s\)整除\(b\)不成立,假设不成立。

也就是集合S中一定存在一个能整除b的数,这个能整除b的数\(x^{'}-sa\)能表示成\(ax+by\)的形式,被染成白色,这个数加上\(sa\)得到\(x^{'}\),也能染成白色。这样就证明了任意一个数\(x^{'}(x^{'}>=a*b)\)能表示成\(ax+by\)的形式。

#include 
using namespace std;
int t,a,b;
int main(){
    cin>>t;
    while(t--){
        cin>>a>>b;
        if(__gcd(a,b)==1)cout<<"Finite\n";
        else cout<<"Infinite\n";
    }
    return 0;
}

你可能感兴趣的:(# codeforces 1245 A. A. Good ol' Numbers Coloring(数学))