CodeForces - 588B
题目链接.
题目大意:给你一个数,在这个数的所有因子a[0,1,2…]里,求一个因子k满足:
不存在k % a[0,1,2,3…] = 0;
要求k最大
思路:
我原本想的是从1 ~n/2遍历所有因子,但还是会超时,得从1 ~ sqrt(n)
代码:
#include<bits/stdc++.h>
typedef long long ll;
using namespace std;
bool judge(ll k){
for(ll i = 2;i*i <= k; ++i){
if(k % (i*i) == 0) return false;
}
return true;
}
ll n,f;
int main(){
while(cin >> n){
ll ans = 0;
for(int i = 1;i <= sqrt(n); ++i){
ll k = n / i;
if(n % i == 0 && judge(k)){ // 大于等于sqrt(n)的因子
ans = k;
goto go;
}
}
for(int i = sqrt(n); i >= 1; --i){
if(n % i == 0 && judge(i)){ //小于等于sqrt(n)的因子
ans = i;
break;
}
}
go:printf("%lld\n",ans);
}
return 0;
}
比赛的时候都没写出来,好弱好弱。