CF1242 A. Tile Painting题解(gcd)

题目链接

题目大意

给定一个长为\(n\)的序列,如果两个位置\(i,j,abs(i-j)|n\)的话这两个位置的颜色必须相同,问最多有多少种颜色

题目思路

只有我是\(fw\)找规律

显然所有因子的\(\gcd\)

这种差值的东西都是\(\gcd\)

代码

#include<bits/stdc++.h>
#define fi first
#define se second
//#define b tm
#define debug cout<<"I AM HERE"<<endl;
using namespace std;
typedef long long ll;
const int maxn=2e6+5,inf=0x3f3f3f3f,mod=1e9+7;
const double eps=1e-6;
typedef pair<int,int> pii;
const ll INF=0x3f3f3f3f3f3f3f3f;
ll n;
vector<ll> vec;
signed main(){
    cin>>n;
    for(ll i=2;i*i<=n;i++){
        if(n%i==0){
           ll x=n/i;
           vec.push_back(i);
           if(x!=i){
                vec.push_back(x);
           }
        }
    }
    ll ans;
    if((int)vec.size()==0){
        ans=n;
    }else{
        ans=vec[0];
        for(auto i:vec){
            ans=__gcd(ans,i);
        }
    }
    printf("%lld\n",ans);
    return 0;
}

posted @ 2021-04-22 21:23  hunxuewangzi  阅读(65)  评论(0编辑  收藏  举报