问题描述
一个整数 a 是一个完全平方数, 是指它是某一个整数的平方, 即存在一个 整数 b, 使得 a=b^2 。
给定一个正整数 n, 请找到最小的正整数 x, 使得它们的乘积是一个完全平 方数。
输入格式
输入一行包含一个正整数 n 。
输出格式
输出找到的最小的正整数 x 。
样例输入 1
12
样例输出-1">样例输出 1
3
样例输入-2">样例输入 2
15
样例输出 2
15
思路:分解质因数,当n是质数时,x==1。
不是质数时,将因数存在Counter计数器中
from collections import Counter
h = Counter() # 计数,质因数的个数
n = int(input())
for i in range(2,int(n**0.5)+1): # 循环遍历
while n%i==0: # 进行分解质因数
n = n//i
h[i] += 1 # 计算质因数个数
x = 1
for i in h:
if h[i]%2 == 1: # 如果质因数的个数为奇数,就乘x
x = x*i
if x == 1:
print(n) # 本身是一个质数,不用分解,打印自身
else:
print(x) # 得到分解质因数后的值