题目描述
一个整数 a 是一个完全平方数,是指它是某一个整数的平方,即存在一个 整数 b,使得 a=b^2 。
给定一个正整数 n,请找到最小的正整数 x,使得它们的乘积是一个完全平方数。
输入格式
输入一行包含一个正整数 n。
输出格式
输出找到的最小的正整数 x。
输入输出样例
输入 #1复制
12
输出 #1复制
3
输入 #2复制
15
输出 #2复制
15
说明/提示
对于 30%的评测用例, 1≤n≤1000,答案不超过 1000。
对于 60% 的评测用例,1≤n≤10^8,答案不超过 10^8。
对于所有评测用例,1≤n≤10^12,答案不超过 10^12。
import java.util.Scanner;
public class Main{
public static void main(String[] args) {
Scanner scanner = new Scanner(System.in);
long n = scanner.nextLong();
long x = tox(n);
System.out.print(x);
}
public static long tox(long n) {
long x = 1;
for(long i = 2;i * i<= n;i++) {
int ans = 0;
while(n % i == 0) {//说明i是n的因数,且i是素数
//若i出现奇数个,那么所求x就是这些i的乘积
//如:30 = 2*15 x = 2 * 15; 12 = 2* 2* 3 x = 3
n /= i;
ans++;
}
if(ans % 2 != 0) x *= i;
}
x *= n;//要考虑n不是1时,即n还未被分解为1的情况
return x;
}
}
题解分析:首先要知道完全平方数的性质:完全平方数的质因子的指数一定为偶数。因此完全平方数一定可以被分解为若干素数相乘,因此我们可以将n也分解为若干素数相乘,其中质因子的指数为奇数的相乘便是所求x,n*x相当于x把n中指数为奇数的质因子补为偶数。