[蓝桥杯 2021 省 AB2] 完全平方数 - 洛谷
题目描述
一个整数 𝑎a 是一个完全平方数,是指它是某一个整数的平方,即存在一个 整数 𝑏b,使得 𝑎=𝑏2a=b2 。
给定一个正整数 𝑛n,请找到最小的正整数 𝑥x,使得它们的乘积是一个完全平方数。
输入格式
输入一行包含一个正整数 𝑛n。
输出格式
输出找到的最小的正整数 𝑥x。
笔者答案:
#include<stdio.h>
int main ()
{
long long n,x,i;
x=1;
int cnt=0;
scanf("%lld",&n);
for(i=2;i*i<=n;i++)
{
while(n%i==0)
{
n/=i;
cnt++;
}
if(cnt%2!=0)
{
x*=i;
}
cnt=0;
}
if(n!=1)
{
x*=n;
}
printf("%lld",x);
return 0;
}
算法收获:
一个数如果能拆成(a的n次方*b的m次方*...)的偶数次方,则该数为完全平方数
易错点:
如果n拆到最后不等于1,则还需要乘以一个n