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;
}