Luogu P8754 [蓝桥杯 2021 省 AB2] 完全平方数 题解
首先,要使 为完全平方数,需要知道完全平方数的一个性质:完全平方数的质因子的指数一定为偶数。
证明:
设 , 是正整数,则根据唯一分解定理,可得:
其中 为质数。
由完全平方数的定义,这个完全平方数 为 ,即:
把括号拆开,得到
可以看到,每个质因子的指数均为 ,必然是偶数。
所以,可以得到这样一个思路:
对 进行质因数分解,若质因子指数为偶数,对结果无影响。若质因子指数为奇数,则在 中乘以这个质因子,保证指数为偶数。
最后是完整代码:
#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;
}
【推荐】国内首个AI IDE,深度理解中文开发场景,立即下载体验Trae
【推荐】编程新体验,更懂你的AI,立即体验豆包MarsCode编程助手
【推荐】抖音旗下AI助手豆包,你的智能百科全书,全免费不限次数
【推荐】轻量又高性能的 SSH 工具 IShell:AI 加持,快人一步
· 物流快递公司核心技术能力-地址解析分单基础技术分享
· 单线程的Redis速度为什么快?
· 展开说说关于C#中ORM框架的用法!
· Pantheons:用 TypeScript 打造主流大模型对话的一站式集成库
· SQL Server 2025 AI相关能力初探