题目描述
思路
一看就知道考数学,直接看题解试图理解(bushi)
完全平方数的质因子的指数一定为偶数。
所以
对 n 进行质因数分解,若质因子指数为偶数,对结果无影响。若质因子指数为奇数,则在 x 中乘以这个质因子,保证指数为偶数。
所以要用到分解质因数的模板
代码
分解质因数模版要会!!用数组存
#include<bits/stdc++.h>
#define int long long
using namespace std;
const int N = 1e5+10;
int a[N];
int b[N]; //a存质因数,s存这个质因数的质数(进行对应)
signed main()
{
int n;
cin >> n;
//给他分解
int cnt = 0;
for(int i = 2; i <= n / i; i++)
{
if(n % i == 0)
{
cnt++;
}
while(n % i == 0) //能除
{
a[cnt] = i; //他的质因子存起来
b[cnt]++;
n /= i;
}
}
if(n > 1) //最后除不尽,也要存下来
{
cnt++;
a[cnt] = n;
b[cnt]++;
}
//上面是质因数分解模板
int ans = 1; //不能初始化为0
for(int i = 1; i <= cnt; i++)
{
// cout<<a[i]<<" "<<b[i]<<endl;
if(b[i] % 2 == 1) //指数是奇数
ans *= a[i];
}
cout<<ans<<endl;
return 0;
}
总结
通过这道题要掌握:
- 完全平方数的质因子的指数一定为偶数。对 n 进行质因数分解,若质因子指数为偶数,对结果无影响。若质因子指数为奇数,则在 x 中乘以这个质因子,保证指数为偶数。用来求平方数
- 分解质因子,求指数和质因数模板