1. 问题描述:
一个整数 a 是一个完全平方数,是指它是某一个整数的平方,即存在一个整数 b,使得 a = b ^ 2。给定一个正整数 n,请找到最小的正整数 x,使得它们的乘积是一个完全平方数。
输入格式
输入一行包含一个正整数 n。
输出格式
输出找到的最小的正整数 x。
数据范围
对于 30% 的评测用例,1 ≤ n ≤ 1000,答案不超过 1000。
对于 60% 的评测用例,1 ≤ n ≤ 10 ^ 8,答案不超过 10 ^ 8。
对于所有评测用例,1 ≤ n ≤ 10 ^ 12,答案不超过 10 ^ 12。
输入样例1:
12
输出样例1:
3
输入样例2:
15
输出样例2:
15
来源:https://www.acwing.com/problem/content/3494/
2. 思路分析:
我们知道一个数的完全平方数等价于它的所有质因子的次数为偶数,所以我们可以求解出n的所有质因子如果次数是偶数则说明可以分解,如果次数是奇数则说明至少需要乘以当前的一个质因子才可以将当前的质因子的次数变为偶数所以次数为奇数的质因子的乘积就是答案。
3. 代码如下:
class Solution:
# 试除法分解质因数
def process(self):
x = int(input())
i = 2
res = 1
while i * i <= x:
s = 0
if x % i == 0:
while x % i == 0:
x //= i
s += 1
if s % 2:
res *= i
i += 1
if x > 1:
res *= x
return res
if __name__ == "__main__":
print(Solution().process())