这道题前几天刚做过,这次再做一下,看看能不能做对
思路:
1.因子p 遍历确认,遍历到;2.指数通过循环不断相除累加确认**【从2开始循环】**。
代码:
cpp
//因子化简
int q;
cin>>q;
while(q--){
long long n,k;
cin>>n>>k;
long long ans=1;
long long tmp=n;
for(int i=2;i*i<=tmp;i++){//遍历找p
int t=0;
while(tmp%i==0){
t++;
tmp/=i;
}
if(t>=k){
ans *= pow(i, t);
}
}
// 处理最后剩余的大质因子(比如n=15,分解完3后剩5)
if (tmp> 1) { // 剩余的temp_n是质因子
int t = 1;
if (t >= k) {
ans *= pow(tmp, t);
}
}
cout<<ans<<endl;
}
反思:这道题用的pow()函数,大数据可能会超出时间限制,要自定义函数,这里就不定义了。
这次写的时候,忘记了i需要从2开始遍历 ,还有// 处理最后剩余的大质因子