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

题目大意

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

解题思路

这是codeforce官方题解:

在这里插入图片描述

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

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

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

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

#include <bits/stdc++.h>
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;
}
  • 0
    点赞
  • 1
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值