Codeforces 1243C Tile Painting(素数)
思路:
1.如果是素数,答案就是这个数;
2.找出所有可以被这个数整除的素数,如果只有一个素数,这个素数即是答案;否则不同素数占有的区间必定交汇,那么只有一个颜色;
代码:
#include<bits/stdc++.h>
using namespace std;
typedef pair<int,int> P;
typedef long long LL;
#define fi first
#define sc second
#define pb(a) push_back(a)
#define mp(a,b) make_pair(a,b)
#define pt(a) cerr<<a<<"---\n"
#define rp(i,n) for(int i=0;i<n;i++)
#define rpn(i,n) for(int i=1;i<=n;i++)
bool is_prime(LL n){
for(LL i=2ll;i*i<=n;i++){
if(n%i==0) return false;
}
return n!=1ll;
}
void solve(LL n){
map<LL,int> res;
for(LL i=2;i*i<=n;i++){
if(res.size()>1) break;
while(n%i==0){
++res[i];
n/=i;
}
}
if(n!=1ll) res[n]=1;
if(res.size()==1) cout<<(*res.begin()).fi;
else cout<<1;
}
int main(){
ios::sync_with_stdio(false);
cin.tie(nullptr);
LL n; cin>>n;
if(is_prime(n)) cout<<n;
else solve(n);
return 0;
}