#include<bits/stdc++.h>
using namespace std;
int q;
long long n,k,ans;
vector<long long> Sushu;
void is_prime(){ //寻找质数
bool isPrime[1001];
int i;
for( i=2;i<=1000;i++){
isPrime[i]=true;
}
for(int j=2;j<=sqrt(1000);j++){
if(i%j==0){
isPrime[i]=false;
break;
}
}
for(int i =2;i<=1000;i++){
if(isPrime[i]){
Sushu.push_back(i);//将质数存入数组中
}
}
}
int main(){
is_prime();
cin >> q;
while(q--){
cin >> n >> k;
ans = 1;
int flag = 0,curK = 0;
while(n > 1 && flag < Sushu.size())
{
if( n % Sushu[flag] == 0)
{
curK ++;//因子的指数加1
n /= Sushu[flag];//继续分解
}
else
{//寻找下一个质数因子
if(curK < k)
{//判断上一个因子的质数是否小于k
curK = 0;//如果小于,把因子指数清0
flag++;
continue;//继续循环
}
else
{
for(int i = 0;i < curK; i++)
{//计算上次分解因数的乘积
ans *= Sushu[flag];
}
curK = 0;
flag++;
}
}
}
//所有满足条件的素数寻找完毕,把最后一次找到的素数因子算出乘积
if(curK >= k){
for(int i = 0;i<curK;i++){
ans*=Sushu[flag];
}
}
cout << ans << endl;
}
}
CCFCSP202312-2因子化简 C/C++ 满分
于 2024-03-04 20:17:42 首次发布