1 条题解
-
0
自动搬运
来自洛谷,原作者为

w9095
回日楼台非甲帐,去时冠剑是丁年。搬运于
2025-08-24 22:42:07,当前版本为作者最后更新于2022-12-20 21:55:55,作者可能在搬运后再次修改,您可在原文处查看最新版自动搬运只会搬运当前题目点赞数最高的题解,您可前往洛谷题解查看更多
以下是正文
首先,要使 为完全平方数,需要知道完全平方数的一个性质:完全平方数的质因子的指数一定为偶数。
证明:
设 , 是正整数,则根据唯一分解定理,可得:
$$b=p_{1}^{k_{1}}\times p_{2}^{k_{2}}\times p_{3}^{k_{3}}\times ... \times p_{r}^{k_{r}} $$其中 为质数。
由完全平方数的定义,这个完全平方数 为 ,即:
$$nx=(p_{1}^{k_{1}}\times p_{2}^{k_{2}}\times p_{3}^{k_{3}}\times ... \times p_{r}^{k_{r}})^2 $$把括号拆开,得到
$$nx=p_{1}^{2k_{1}}\times p_{2}^{2k_{2}}\times p_{3}^{2k_{3}}\times ... \times p_{r}^{2k_{r}} $$可以看到,每个质因子的指数均为 ,必然是偶数。
所以,可以得到这样一个思路:
对 进行质因数分解,若质因子指数为偶数,对结果无影响。若质因子指数为奇数,则在 中乘以这个质因子,保证指数为偶数。
最后是完整代码:
#include <bits/stdc++.h> using namespace std; long long n,ans=1; int main() { scanf("%lld",&n); for(long long i=2;i*i<=n;i++) { int cnt=0; //cnt计数,表示质因子pri[i]的指数 while(!(n%i))cnt++,n/=i; if(cnt%2)ans*=i; //如果指数不是偶数,在x中要有一个这个质因子,保证指数为偶数 } if(n!=1)ans*=n;//注意n没分尽的情况 printf("%lld",ans); return 0; }
- 1
信息
- ID
- 7932
- 时间
- 1000ms
- 内存
- 128MiB
- 难度
- 2
- 标签
- 递交数
- 0
- 已通过
- 0
- 上传者