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


    题目大意

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

    解题思路

    这是codeforce官方题解:

    在这里插入图片描述

    根据染色要求,一个格子如果能表示成(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<t))对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<b,s<b,(t-s)<b),所以(t-s)整除(b)不成立,假设不成立。

    也就是集合S中一定存在一个能整除b的数,这个能整除b的数(x^{'}-sa)能表示成(ax+by)的形式,被染成白色,这个数加上(sa)得到(x^{'}),也能染成白色。这样就证明了任意一个数(x^{'}(x^{'}>=a*b))能表示成(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
    ";
            else cout<<"Infinite
    ";
        }
        return 0;
    }
    
  • 相关阅读:
    java servlet手机app访问接口(三)高德地图云存储及检索
    java servlet手机app访问接口(二)短信验证
    java servlet手机app访问接口(一)数据加密传输验证
    java Servlet+mysql 调用带有输入参数和返回值的存储过程(原创)
    java servlet Json.org.jar
    java Servlet(续)
    [HAOI2015]树上操作
    [USACO15DEC]最大流Max Flow
    [NOI2015]软件包管理器
    [洛谷P3384]【模板】树链剖分
  • 原文地址:https://www.cnblogs.com/sstealer/p/13295749.html
Copyright © 2020-2023  润新知