目录
问题描述
样例输入
3
2155895064 3
2 2
10000000000 10
样例输出
2238728
1
10000000000
代码
#include <iostream>
using namespace std;
/*
因子化简:
一共有三个函数,一个主函数,一个判断是否为素数的函数,一个计算结果的函数
注意:
大数和它的因子必须定义成long long,因为int会越界
*/
int is_primes(long long num){
if(num <= 1)
return 0;
for(long long i = 2; i * i <= num; i++){
if(num % i == 0){
return 0;
}
}
return 1;
}
long long simplify_value(long long x, int y){
// 定义一个二维数组用于存储素因子及其指数
long long primes[100][2] = {0}; // 初始化为0,避免未初始化的值
int count = 0;
// 计算素因子及其指数
for(long long i = 2; i * i <= x; i++){
if(is_primes(i) == 1 && x % i == 0){
primes[count][0] = i; // 存储素因子
while(x % i == 0){
x /= i;
primes[count][1] += 1; // 素因子的指数加1
}
count++;
}
}
if(x > 1){
primes[count][0] = x;
primes[count][1] = 1;
count++;
}
// 计算简化后的值
long long result = 1;
for(long long i = 0; i < count; i++){
if(primes[i][1] >= y){
for(long long j = 0; j < primes[i][1]; j++){
result *= primes[i][0];
}
}
}
return result;
}
int main(){
int n;
scanf("%d", &n);
long long queries[n][2];
for(int i = 0; i < n; i++){
scanf("%lld %lld", &queries[i][0], &queries[i][1]);
}
for(int i = 0; i < n; i++){
printf("%lld\n", simplify_value(queries[i][0], queries[i][1]));
}
return 0;
}