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

题目链接

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

题目描述

一个整数 a a a 是一个完全平方数,是指它是某一个整数的平方,即存在一个 整数 b b b,使得 a = b 2 a = b^2 a=b2

给定一个正整数 n n n,请找到最小的正整数 x x x,使得它们的乘积是一个完全平方数。

输入格式

输入一行包含一个正整数 n n n

输出格式

输出找到的最小的正整数 x x x

输入输出样例
输入

12

输出

3

输入

15

输出

15

数据范围
  • 1 ≤ n ≤ 1 0 12 1 \leq n \leq 10^{12} 1n1012

解法:数学 + 质因数分解

如果一个数 a a a 是完全平方数,那么他一定有两个相同的因子 b 1 b_1 b1 b 2 b_2 b2,使得 b 1 × b 2 = a b_1 \times b_2 = a b1×b2=a

因为 b 1 b_1 b1 b 2 b_2 b2 是相等的,所以他们各自的质因数也相等。

我们就可以很容易的得出一个结论,如果一个数 a a a 是 完全平方数,那么 a a a 的质因数个数一定是偶数个!

举例, a = 36 a = 36 a=36 是一个完全平方数,将其质因数分解为 a = 36 = 2 × 2 × 3 × 3 a = 36 = 2 \times 2 \times 3\times 3 a=36=2×2×3×3

示例一, n = 12 = 2 × 2 × 3 n = 12 = 2 \times 2 \times 3 n=12=2×2×3,我们发现 3 3 3 这个因子只有一个是 奇数个 ,所以我们要将其变为 偶数个 才能使得 n n n 变成完全平方数,我们只要让 n n n 乘上一个 3 3 3 即可。

所以我们可以直接对 n n n 进行 质因数分解,对于奇数个的质因子,我们都要补充一个,我们最终的答案就是所有这些需要补充的质因子的乘积!

时间复杂度: O ( n ) O(\sqrt{n}) O(n )

C++代码:

#include <iostream>
#include <unordered_map>
#include <functional>

using namespace std;
using LL = long long;

unordered_map<LL, int> cnt;

void fun(LL x)
{
    for(int i = 2;i <= x / i;i++){
        while(x % i == 0){
            cnt[i]++;
            x /= i;
        }
    }
        
    if(x > 1) cnt[x]++;
}

void solve(){
    LL n;
    cin>>n;
    
    fun(n);
    
    LL ans = 1;
    for(auto [k, v]:cnt){
        if(v & 1) ans *= k;
    }
    
    cout<<ans<<'\n';
}

int main(){
    int t = 1;
    while(t--)
    {
        solve();
    }
    
    return 0;
}

Java代码:



import java.util.*;
import java.io.*;

public class Main{
	static BufferedReader in = new BufferedReader(new InputStreamReader(System.in));
	static Map<Long, Integer> map;
	
	public static void fun(long x) 
	{
		map = new HashMap<>();
		for(long i = 2;i <= x / i;i++) 
		{
			while(x % i == 0) 
			{
				map.put(i, map.getOrDefault(i, 0) + 1);
				x /= i;
			}
		}
		if(x > 1) map.put(x, map.getOrDefault(x, 0) + 1);
	}
	
	public static void main(String[] args) throws Exception 
	{
		long n = Long.parseLong(in.readLine().trim());
		fun(n);
		
		long t = 1;
		for(long k:map.keySet()) 
		{
			int cnt = map.get(k);
			if((cnt & 1) == 1) t *= k;
			//System.out.println(k + " " + cnt);
		}
		
		System.out.println(t);
	}
}

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.mfbz.cn/a/462794.html

如若内容造成侵权/违法违规/事实不符,请联系我们进行投诉反馈qq邮箱809451989@qq.com,一经查实,立即删除!

相关文章

开环端到端自动驾驶: 到底行不行

开环端到端自动驾驶&#xff1a; 到底行不行 附赠全面专业的自动驾驶学习资料&#xff1a;直达链接 TLDR: 别在nuScenes上做开环端到端自动驾驶刷点了。 论文&#xff1a; https://arxiv.org/pdf/2312.03031.pdf github: https://github.com/NVlabs/BEV-Planner 前言 Uni…

idea中database的一些用法

1、查看表结构 方法1&#xff0c;右键&#xff0c;选这个 方法2 双击表后&#xff0c;看到数据&#xff0c;点DDL 方法3 写SQL时&#xff0c;把鼠标放在表名上&#xff0c;可以快速查看表结构 2、表生成对应的实体类 表中右键&#xff0c;选择这2个&#xff0c;选择生成的路…

物联网 3.15日 | 2024年中国七大 IoT 物联网云平台价格对比

随着 中国电信天翼 CTWing 物联网平台正式开始收费&#xff0c;国内物联网平台云产品发展进入成熟期&#xff0c;越来越多企业选择云厂商提供的物联网PaaS服务&#xff0c;以降低运营成本&#xff0c;缩短业务上线周期&#xff0c;释放运维的人力&#xff0c;按需付费动态扩容。…

2024 第一届VCTF 纳新赛 Web方向 题解WP

hackjs 题目描述&#xff1a;A baby oldjs, just warm up. 附件给源码 const express require(express) const fs require(fs) var bodyParser require(body-parser); const app express() app.use(bodyParser.urlencoded({extended: true })); app.use(bodyParser.json…

安装python、pycharm,打好基础,准备飞起

python安装使用 安装python安装包 以下为自定义安装python安装包&#xff0c;无特殊要求可直接进行安装。 勾选Add Python 3.6 to PATH&#xff0c; 然后点击 Customize installation&#xff0c;进行自定义安装。 所有的都勾上&#xff0c;然后点击Next。 可选择自己需要…

【算法杂货铺】模拟

目录 &#x1f308;前言&#x1f308; &#x1f4c1;1576. 替换所有的问号​编辑 &#x1f4c1; 495. 提莫攻击 &#x1f4c1; 6. Z 字形变换 &#x1f4c1;38. 外观数列 &#x1f4c1;1419. 数青蛙 &#x1f4c1; 总结 &#x1f308;前言&#x1f308; 欢迎观看本期【算…

鸿蒙Harmony应用开发—ArkTS声明式开发(容器组件:Stack)

堆叠容器&#xff0c;子组件按照顺序依次入栈&#xff0c;后一个子组件覆盖前一个子组件。 说明&#xff1a; 该组件从API Version 7开始支持。后续版本如有新增内容&#xff0c;则采用上角标单独标记该内容的起始版本。 子组件 可以包含子组件。 接口 Stack(value?: { ali…

「SpringBrick快速入门指南」:一款基于Spring Boot的高级插件化开发框架

文章目录 关于 | About技术文档 | Document开源项目 | Project 案例 | Demo项目结构 | Structure主程序配置集成 | Settings引入框架依赖 | Framework在配置文件加入配置 | YamlSpringBoot启动类改引导类 | Change 插件配置集成 | Settings引入依赖 | XML定义插件引导类 | Clas…

计算机服务器中了360后缀勒索病毒怎么办,勒索病毒解密工具与流程

对于众多的企业来说&#xff0c;利用网络开展各项工作业务是必不可少的环节&#xff0c;网络为企业的生产运营提供了有利条件&#xff0c;但网络是一把双刃剑&#xff0c;在为人们提供便利的同时&#xff0c;也为企业的数据安全带来严重威胁。近期&#xff0c;云天数据恢复中心…

Linux 基础-查看和设置环境变量

一&#xff0c;查看环境变量 在 Linux中&#xff0c;环境变量是一个很重要的概念。环境变量可以由系统、用户、Shell 以及其他程序来设定&#xff0c;其是保存在变量 PATH 中。环境变量是一个可以被赋值的字符串&#xff0c;赋值范围包括数字、文本、文件名、设备以及其他类型…

Linux系统——Session ID(负载均衡如何保持会话)

目录 一、实验环境搭建 二、部署Nginx代理服务器配置 三、部署后端真是服务器Tomcat配置 四、配置Tomcat的Session ID会话保持 五、测试 此次实验是Tomcat后端服务器如何做Session ID会话保持 一、实验环境搭建 [rootlocalhost ~]#systemctl stop firewalld [rootlocalho…

实战:django项目环境搭建(pycharm,virtualBox)

django项目环境搭建 一.创建虚拟环境二.创建PyCharm远程连接 一.创建虚拟环境 需要用到的软件&#xff1a;PyCharm&#xff0c;VirtualBox虚拟机。 1.打开虚拟机终端&#xff0c;创建新的虚拟环境 Book。 2.在虚拟环境中创建新的文件夹 library&#xff0c;cd命令进入该文件…

MIT线性代数-方程组的几何解释

文章目录 1. 二维空间1.1 行方向1.2 列方向 2. 三维空间2.1 行方向2.2 列方向 假设有一个方程组 A X B AXB AXB表示如下 2 x − y 0 (1) 2x-y0\tag{1} 2x−y0(1) − x 2 y 3 (2) -x2y3\tag{2} −x2y3(2) 矩阵表示如下&#xff1a; [ 2 − 1 − 1 2 ] [ x y ] [ 0 3 ] (3)…

数据分析-Pandas的直接用Matplotlib绘图

数据分析-Pandas的直接用Matplotlib绘图 数据分析和处理中&#xff0c;难免会遇到各种数据&#xff0c;那么数据呈现怎样的规律呢&#xff1f;不管金融数据&#xff0c;风控数据&#xff0c;营销数据等等&#xff0c;莫不如此。如何通过图示展示数据的规律&#xff1f; 数据表…

Linux第80步_使用“信号量”实现“互斥访问”共享资源

1、创建MySemaphoreLED目录 输入“cd /home/zgq/linux/Linux_Drivers/回车” 切换到“/home/zgq/linux/Linux_Drivers/”目录 输入“mkdir MySemaphoreLED回车”&#xff0c;创建“MySemaphoreLED”目录 输入“ls回车”查看“/home/zgq/linux/Linux_Drivers/”目录下的文件…

基于opencv的图像处理系统的设计与实现

概要 随着计算机技术的飞速发展&#xff0c;图像技术在各领域的研究和应用日渐深入和广泛。opencv是近年来推出的开源、免费的计算机视觉库,利用其所包含的函数可以很方便地实现数字图像处理。本文旨在对opencv进行一个快速全面简介,通过介绍图像处理的相关函数&#xff0c;使读…

Git学习记录

目录 Git Git介绍 版本控制 版本控制工具 集中式版本控制工具 分布式版本控制工具 Git工作机制 ​编辑 Git和代码托管中心 Git安装 Git常用命令 设置用户签名 初始化本地库 查看本地库状态 添加到暂存区 提交到本地库 修改文件 历史版本 查看历史版本 版本…

python的opencv最最基础初学

localhost中详解OpenCV的函数imread()和函数imshow(),并利用它们实现对图像的读取和显示_opencv imshow-CSDN博客 其实以下均为numpy 显示一张图片 import cv2 ####opencv读取的格式是BGR import matplotlib.pyplot as plt import numpy as np %matplotlib inline imgcv2.…

“一键解锁复古魅力:底片效果瞬间生成!“

时光荏苒&#xff0c;岁月如梭。你是否曾怀念那些旧时光里&#xff0c;老照片所散发出的独特韵味&#xff1f;那种历经岁月沉淀的底片效果&#xff0c;仿佛能带我们回到那些被遗忘的角落&#xff0c;重温那些温馨的瞬间。 首先第一步&#xff0c;我们要进入视频剪辑高手&#…

算法---滑动窗口练习-6(找到字符串中所有字母异位词)

找到字符串中所有字母异位词 1. 题目解析2. 讲解算法原理3. 编写代码 1. 题目解析 题目地址&#xff1a;找到字符串中所有字母异位词 2. 讲解算法原理 有效字符个数count更新条件&#xff1a;满足【hash1表&#xff08;遍历s的表&#xff09;中对应元素出现次数<hash2表&am…
最新文章