• cf 1243 C. Tile Painting(中国剩余定理)


    题意:

    有n个连续的格子,编号1~n,现在要涂色,设 mi 为 n 的因数,规定:如果 | i - j | % mi = 0,那么 i 和 j 需要同色,问:最多可以有多少种不同的颜色?

    思路:

    1.如果 n 为素数,答案就是 n。

    2.如果 n 的素因子只有一种,那么答案就是那个因子。

    以上两种都很明显。

    3.如果 n 的素因子,有两个,m1 和 m2

    现在任选两个位置,i 和 j,是否存在一个 x <= n,使得| i - x | % m1 = 0 并且 | j - x | % m2 = 0

    如果存在,那么,i 和 j 就要同色。

    根据中国剩余定理

    这里的 x ☰ a1 (mod m1)的意思就是 (x mod m1)= (a1 mod m1),也就是说 (x - a1)mod m1 = 0

    根据定理

    所以,一定存在一个 x ,并且小于 M,M 就是lcm,也就是n了

    4.那么如果有两个以上的素因子的话,就不用说了,答案肯定是 1 了。

    代码:

    #include <stdio.h>
    #include <string.h>
    #include <iostream>
    #include <cmath>
    #include <queue>
    using namespace std;
    typedef long long ll;
    int main(){
        ll n;
        while(scanf("%lld",&n) != EOF){
            if(n == 1){
                printf("1
    ");
                continue;
            }
            int num = 0;
            ll ans = -1;
            for(ll i = 2;i <= sqrt(n);i++){
                if(n % i == 0){
                    ans = i;
                    num++;
                }
                while(n % i == 0){
                    n /= i;
                }
                if(n == 1)
                    break;
            }
            if(n != 1){
                ans = n;
                num++;
            }
            if(num == 1){
                printf("%lld
    ",ans);
            }
            else{
                printf("1
    ");
            }
        }
        return 0;
    }
    View Code
  • 相关阅读:
    Python GIL-------全局解释器锁
    JavaScript简介
    MongoDB查询
    创建、更新和删除文档
    MongoDB基础知识
    Linux安装mysql
    函数、变量、参数
    循环语句
    控制语句
    集合
  • 原文地址:https://www.cnblogs.com/InitRain/p/12509917.html
Copyright © 2020-2023  润新知