代码
#include <iostream>
#include <vector>
#include<math.h>
using namespace std;
typedef long long int ll;
bool if_su(ll su){
for (ll i = 2; i < su; i++)
{
if(su%i==0){
return false;
}
}
return true;
}
ll chose_next_su(ll su,ll n){
if(n==1){
return 1;
}
for (ll i = su+1; i <= n; i++)
{
if(if_su(i)){
return i;
}
}
return 1;
}
int main()
{
ll n, q, k;
cin >> q;
for (int i = 0; i < q; i++)
{
cin >> n >> k;
ll start_su=2;//起始的素数
ll sum = 1;
if(n<start_su){
cout<<1<<endl;
}
else{
//一直除以一个素数直到不能再除为止
ll su= start_su;
// cout<<n<<endl;
while(n>1){
//两层循环 用数字记录指数
ll count=0;
ll temp_sum=1;
while(n%su==0){
n/=su;
count++;
temp_sum*=su;
}
if(count>=k){
sum*=temp_sum;
}
//选择下一个素数
su=chose_next_su(su,n);
}
cout<<sum<<endl;
}
}
return 0;
}
结果
运行超时 最后结果为80 有些案例因为数据过大 我的解决方法还是效率不高 有更高的可以和我讨论 谢谢