蓝桥每日真题之完全平方数

Posted MangataTS

tags:

篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了蓝桥每日真题之完全平方数相关的知识,希望对你有一定的参考价值。

题目来源

2021年蓝桥省赛第二场H题

题目链接:http://acm.mangata.ltd/p/P1165

视频讲解

视频连接:https://www.bilibili.com/video/BV1aZ4y1f76j/

思路

我们来考虑n的情况

  • 当n为质数的时候:我们直接返回当前这个数即可
  • 当n不是质数的时候:由于我们之前学过的唯一分解定理(学习链接:https://blog.csdn.net/m0_46201544/article/details/122280910 )可以知道一个合数是会被一种最小质数的积的形式的,那么我们只需要判断在这个过程中每一个质数的数量即可,我们只需要给奇数个质数因子再乘上一个该质数就可以让这个数变成完全平方数,所以我们直接使用唯一分解定理求解就好啦

代码

#include<bits/stdc++.h>
using namespace std;
#define ll long long
#define mod 1000000009
ll ksm(ll a,ll b) 
	ll ans = 1;
	for(;b;b>>=1LL) 
		if(b & 1) ans = ans * a % mod;
		a = a * a % mod;
	
	return ans;


ll lowbit(ll x)return -x & x;

const int N = 2e6+10;

ll n;

int main()

	cin>>n;
	ll ans = 1;
	for(ll i = 2;i * i <= n; ++i) 
		ll cnt = 0;
		while(n % i == 0) 
			cnt++;
			n/=i;
		
		if(cnt & 1) ans *= i;
	
	ans *= n;
	cout<<ans<<endl;
	return 0;

以上是关于蓝桥每日真题之完全平方数的主要内容,如果未能解决你的问题,请参考以下文章

蓝桥每日真题之小平方

蓝桥每日真题之完全日期

每日算法之四数平方

《LeetCode之每日一题》:57.完全平方数

《LeetCode之每日一题》:197.有效的完全平方数

算法笔记_213:第七届蓝桥杯软件类决赛部分真题(Java语言C组)