完全平方数
题目大意
给定一个正整数 \(n\),找到最小的正整数 x,使得它们的乘积是一个完全平方数。
思路
1. 定理
算术基本定理指出:任何大于1的自然数 \(N\),要么本身是素数,要么可以唯一地分解为有限个素数的乘积。具体表述为:
$ N = p_1^{a_1} p_2^{a_2} \cdots p_k^{a_k}$
其中 \(( p_1 < p_2 < \cdots < p_k )\) 为素数,\(a_i\) 为正整数,且这种分解方式在不考虑素数排列顺序时是唯一的。
那么我们可以将 \(n\) 分解成一堆素数的乘积。
如果我们分解完全平方数,就会发现它分解出来的素数的 \(a_i\)都为偶数。
证明也很简单:
一个完全平方数必然可以由 sqrt(n) * sqrt(n) 得到。
每个 sqrt(n) 可以根据算数基本定理分解成若当素数的乘积。
然后两个 sqrt(n) 相乘去得到 n,那么相当于每一个素数的指数乘2,那么得到的 n 根据算数基本定理分解出来的若当素数的指数必然是偶数。
那么如果我们想让 \(n\) 乘上某一个数 \(x\)之后变成完全平方数,相当于是让它分解出来的素数的指数全都变为偶数。
那么我们就分解 \(n\), 如果某一个素数的指数是奇数,那么说明我们要补上这个素数,那么答案的x就要可以分解出一个这个素数。
依次检验即可。