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;
}
比赛的时候都没写出来,好弱好弱。
博客讲述了CodeForces-588B问题的解决方案,该问题要求找到一个数的所有因子中最大的质因子。作者最初的思路是从1到n/2遍历所有因子,但发现超时,于是改用从1到sqrt(n)的方法,同时检查因子是否为质数。最终实现了满足条件的高效算法。
248

被折叠的 条评论
为什么被折叠?



