P8754 [蓝桥杯 2021 省 AB2] 完全平方数

题目描述

在这里插入图片描述

思路

一看就知道考数学,直接看题解试图理解(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 中乘以这个质因子,保证指数为偶数。用来求平方数
  • 分解质因子,求指数和质因数模板
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值