算法题求助
嗯昨天在打一个算法的比赛(atcoder),然后遇到个这道题。
给了个正整数n,题目保证n能写成(p^2)*q的形式(p,q为质数)
求p,q
枚举肯定会超时,(时限3000ms),我选择先在n的三次方根内找一个n的因数,很简单就能推理出这个数不是p就是q,然后根据质数的性质分类讨论就行
然后交上去一看,发现16个数据点答案错误
所以哪位大佬能帮我看看哪儿错了
`
cin>>n;
for (ll i=2;i*i*i<=n;i++){
if (n%i==0){
if (gcd(i,n/i)==i){
cout<<i<<" "<<n/(i*i)<<'\n';
}else{
cout<<sqrt(n/i)<<" "<<i<<'\n';
}
}
}
⌓‿⌓
钓鱼帖
这是啥语言?
gcd
是什么?我不会
果然我还是太菜了,题都读不懂
欧几里得算法,用来计算两个正整数的最大公约数
分解质因数可以直接从2开始除的,我刚vp完,看这题题解看傻了都
这是初一学的???
static_cast<int>(sqrt(n/i)+0.5)
另外感觉可以用一用break,以及预先计算n^(1/3)