题目中每个因子的幂其实就是每个因子出现的次数,先考虑质因数分解每个数,然后用map存储每个因子以及出现的次数,之后遍历map,筛选出来符合条件的因子后累乘,结果保存到vector中,遍历输出即可。
#include <bits/stdc++.h>
using namespace std;
typedef long long ll;
ll n,x,y;
vector<ll> ans; //存储输出的结果答案
map<ll,ll> freq;//记录每个因子和出现的次数
int i =2;
void divide(long long x){
while(x>=i){
if(x<2){
freq[x]=1;
break;
}
if(x%i==0){
freq[i]+=1;
x=x/i;
}else{
i++;
}
}
}
int main() {
cin>>n;//查询次数
while(n--){
cin>>x>>y;
ll midans =1;
divide(x);
ll len = freq.size();
for(map<ll,ll>::iterator it=freq.begin();it!=freq.end();it++){
if(it->second>=y){
midans=midans*(ll)pow(it->first,it->second);
}
}
ans.emplace_back(midans);
freq.clear();//清空重置map,下一次循环继续使用
i=2;//i也得重置
}
for(int i =0;i<ans.size();i++){
cout<<ans[i]<<endl;
}
return 0;
}