3.18 每日一题题解

Tile Painting

题目链接:https://codeforces.com/problemset/problem/1242/A

涉及知识点:

  • 思维/数学

solution:

  • 假如n是质数,答案应该是n
  • 否则我们考虑枚举n的所有因子,A1,A2....Am,意思就是每隔A1个数都相同,每隔A2个数都相同.....每隔Am个数都相同
  • 实际上就是求所有因子的最小公倍数
  • 另外还有一种更巧妙的做法,考虑将n进行质因子分解,如果分解出来不同质因子的个数大于等于2,答案一定就是1,因为质因子都互质,gcd也一定是1

std:

#include <bits/stdc++.h>
using namespace std;
#define ll long long
vector<ll> v;
int main()
{
    ll n;
    cin>>n;
    for(ll i=2;i<=sqrt(n);i++)
    {
        if(n%i == 0){
            v.push_back(i);
            v.push_back(n/i);
        }
    }
    if(v.size() == 0){
        cout<<n<<endl;
        return 0;
    }
    ll gc = v[0];
    for(int i=1;i<v.size();i++){
        gc = __gcd(gc , v[i]);
    }
    cout<<gc<<endl;
    return 0;
}
posted @ 2020-03-18 16:19  QFNU-ACM  阅读(134)  评论(0编辑  收藏  举报