蓝桥杯第18489题——拔苗助长(质数+map)

问题描述

蓝桥村是蓝桥王国年年的模范村,这是因为他们村的稻田每年都是优美的。

对于一块稻田来说,如果其中任意两根不同的秧苗的高度乘积均为完全平方数,该稻田被称之为优美的稻田。

蓝桥王国的稻田验收日即将到来,但现在蓝桥村还有一块插了 𝑁 根秧苗的稻田不够优美,其中第 𝑖 根秧苗的高度为 ℎ𝑖。

作为蓝桥杯的村长,你可以发动技能拔苗助长:

  • 选择一个质数 x (2 ≤ x ≤ 10^6) ,同时将任意一株高度为 ℎ 的秧苗变为 ℎ×𝑥。

请问你最少需要发动多少次拔苗助长才可以将该稻田变得优美。

输入格式

第一行输入一个整数 𝑁 (1 ≤ 𝑁 ≤ 10^5) 表示稻田中秧苗的数量。

第二行输入 𝑁N 个整数 ℎ1,ℎ2,ℎ3,⋯,ℎ𝑁 (1 ≤ 𝐴𝑖 ≤ 10^6) 表示秧苗的高度。

输出格式

输出一个整数表示答案。

输入样例

5
1 2 3 4 5

输出样例

3

解题思路

题目说让每两个数相乘都是一个完全平方数,这里不难想到分解质因数,如果要满足这个要求,则需要任意两个数相乘,其所有质因数都是偶数个数。

对于任意质因数p,任意两个数相乘的结果中p的个数为偶数,则说明两个数中的p的个数要么都是奇数,要么都是偶数;反过来说,如果存在任意两个数a和b,假设a的质因数2的个数为1个,那么b的质因数2的个数如果是偶数,则a和b相乘的结果必不可能是完全平方数。

因此我们考虑对于每一个数x进行统计,计算其所有质因数出现的次数,对于某个质因数p,如果其对于某个x出现的次数为奇数,就记录一次;这样的目的是方便我们最终考虑是将每个数中的p都变成奇数个还是偶数个。

举一个具象化的例子,对于一个数列2 2 2 3:对质因数2来说,有三个x存在奇数个2;对质因数3来说,有一个x存在奇数个3。上述情况中,我们应该选择将所有x中质因数2的个数补齐到奇数个,这样只需要操作4 - 3 = 1次;而对于质因数3,我们应该选择补齐到偶数个,这样只需要操作1次。

所以可以考虑到,对于每个质因数p,其在每个x中出现奇数次的次数num,对答案的贡献是min(num, n - num)。

为了记录每一个x的每一个质因数的个数,我们可以使用Map数据结构,同时可以使用埃氏筛加快这个过程,我们筛选出log(N)以内所有质数逐一测试,如果在试除计算的最后没有变成1,则其本身就是一个质数,即自己的一个质因数。

import java.util.*;public class Main {static final int inf = (int) 1e9;static final int N = (int) Math.sqrt(1e6 + 1);static boolean[] prime;static ArrayList<Integer> primeList;public static void main(String[] args) {e_sieve();System.out.println(primeList);Scanner sc = new Scanner(System.in);int n = sc.nextInt();Map<Integer, Integer> mapAll = new HashMap<Integer, Integer>();for (int i = 0; i < n; i++) {int temp = sc.nextInt();Map<Integer, Integer> map = new HashMap<Integer, Integer>();for (int e : primeList) {while (temp % e == 0) {temp /= e;map.put(e, map.getOrDefault(e, 0) + 1);}if (temp == 1) {break;}}if (temp != 1) {map.put(temp, 1);}for (java.util.Map.Entry<Integer, Integer> e : map.entrySet()) {if (e.getValue() % 2 == 1) {mapAll.put(e.getKey(), mapAll.getOrDefault(e.getKey(), 0) + 1);}}}System.out.println(mapAll);long ans = 0;for (int e : mapAll.values()) {ans += Math.min(e, n - e);}System.out.print(ans);}static void e_sieve() {primeList = new ArrayList<Integer>();prime = new boolean[N];Arrays.fill(prime, true);prime[0] = false; prime[1] = false;for (int i = 2; i < N; i++) {if (prime[i]) {primeList.add(i);for (long j = 1L * i * i; j < N; j += i) {prime[(int)j] = false;}}}}
}

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

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈email:809451989@qq.com,一经查实,立即删除!

相关文章

BGP(一)边界网关协议

BGP协议基础 路由分类 直连路由 非直连路由&#xff08;间接路由&#xff09; 静态路由动态路由 IGP&#xff1a;内网网关路由协议&#xff08;在企业内部或数据中心内部使用&#xff09; DV&#xff1a;距离矢量路由协议RIP&#xff08;v1/v2&#xff09;IGRP——网络直径&…

【易生支付官网注册/登录安全分析报告】

前言 由于网站注册入口容易被黑客攻击&#xff0c;存在如下安全问题&#xff1a; 暴力破解密码&#xff0c;造成用户信息泄露短信盗刷的安全问题&#xff0c;影响业务及导致用户投诉带来经济损失&#xff0c;尤其是后付费客户&#xff0c;风险巨大&#xff0c;造成亏损无底洞…

【会议征稿,IEEE独立出版】第四届计算机技术与信息科学国际研讨会(ISCTIS 2024)

第四届计算机技术与信息科学国际研讨会&#xff08;ISCTIS 2024)将于2024年7月12-14日在中国西安举行。大会将邀请国内外计算机技术与信息科学领域的知名专家学者出席会议&#xff0c;在大会上通过主题演讲、口头报告等方式与学者们分享最新研究成果、交流探讨学术难题。同时&a…

彩信JSON接口对接发送

随着通讯技术的飞速发展&#xff0c;传统的短信已经无法满足人们日益增长的沟通需求。在这样的背景下&#xff0c;群发彩信作为一种更为先进、更为丰富的信息传递方式&#xff0c;逐渐受到了企业和个人的青睐。那么&#xff0c;群发彩信应该怎么对接&#xff0c;又具体有哪些优…

模特百度百科怎么做出来的

百度百科是一个公正、开放、客观的平台&#xff0c;收录了大量的百科词条内容&#xff0c;形成了一定的“权威性”。以下是关于模特百度百科制作的具体步骤和注意事项&#xff1a; 准备阶段 收集资料&#xff1a;为了确保参赛作品的真实性和权威性&#xff0c;需要收集相关信息…

招展工作全面启动!2024深圳国际数字能源展览会

2024深圳国际数字能源展览会 2024 International Digital Energy Expo 时间:2024年9月8-11日 地点:深圳会展中心 指导单位&#xff1a; 国家能源局 深圳市人民政府 中国电力企业联合会 主办单位&#xff1a; 深圳市投资控股有限公司 深圳能源集团股份有限公司 深圳市资…

15.数组的方法(改变原数组和不改变原数组)

改变原数组 &#xff08;1&#xff09;pop 语法&#xff1a;数组名.pop() 作用&#xff1a;删除数组最后一项 返回值&#xff1a;返回被删除的那一项 var arr["zhangsna","lisi","wanger","mazi"] var resarr.pop() console.log(arr) …

【Android14 ShellTransitions】(一)开篇

说来惭愧&#xff0c;AndroidU都已经开发这么久了&#xff0c;但是我还没有整理过ShellTransition相关的知识。我本来希望能够系统的写一篇关于ShellTransition的笔记出来&#xff0c;但是发现一来这是一个比较庞大的模块&#xff0c;二来我个人能力有限&#xff0c;对ShellTra…

插件“猫抓”使用方法 - 浏览器下载m3u8视频 - 合并 - 视频检测下载 - 网课下载神器

前言 浏览器下载m3u8视频 - 合并 - 网课下载神器 chrome插件-猫抓 https://chrome.zzzmh.cn/info/jfedfbgedapdagkghmgibemcoggfppbb 步骤&#xff1a; P.s. 推荐大佬的学习视频&#xff01; 《WEB前端大师课》超级棒&#xff01; https://ke.qq.com/course/5892689#term_id…

ty1208-z盒子 刷 armbian

ty1208-z&#xff0c;1g ram 8g emmc&#xff0c;s905m的cpu 1.安装“win32diskimager-1.0.0-install.exe”,使用它的默认设置制作“Armbian_5.77_Aml-s905_Debian_stretch_default_5.0.2_20190401.img”U盘启动盘。 2.将U盘启动盘中根目录下的aml_autoscript.zip改名为updat…

discuzX2.5的使用心得 札记一

从开始接受php论坛的开发任务&#xff0c;对php感兴趣的我开始迷恋上discuz这个产品了&#xff0c; 像戴志康这样的创新人才&#xff0c;是我们这代人的骄傲和学习的榜样 应该是了解一下&#xff0c;啥事discuzX2.5&#xff0c;百度看一下 discuz x2.5_百度百科 看完百度词条…

Vue 子组件向父组件传值

1、使用自定义事件 ($emit) 这是Vue中最常用的子组件向父组件传递数据的方式。子组件通过触发一个自定义事件&#xff0c;并附加数据作为参数&#xff0c;父组件则监听这个事件并处理传递过来的数据。 子组件 (发送数据)&#xff1a; <template><button click"…

Python + pytest + allure框架搭建源码

框架功能讲解 common # 配置 config.yaml # 公共配置 setting.py # 环境路径存放区域 data # 测试用例数据 Files # 上传文件接口所需的文件存放区域 logs # 日志层 report # 测试报告层 test_case # 测试用例代码 __init__.py # 读取测试用例文件&#xff0c;并…

JJJ:WARN,WARN_ON,BUG_ON

WARN用法&#xff1a; WARN(i > 1, “if i > 1, will print”) 当满足一些条件时&#xff0c;该函数会输出一条带有调试信息的警告消息&#xff0c;并打印出相应的调用栈信息&#xff0c;以便于开发人员进行调试。 不要过度使用&#xff0c;否则会造成系统性能下降。在生…

C语言 | Leetcode C语言题解之第101题对称二叉树

题目&#xff1a; 题解&#xff1a; /*** Definition for a binary tree node.* struct TreeNode {* int val;* struct TreeNode *left;* struct TreeNode *right;* };*/ bool isSymmetric(struct TreeNode* root) {if (root NULL) return true;//如果根为空直接…

selenium 爬取今日头条

由于今日头条网页是动态渲染&#xff0c;再加上各种token再验证&#xff0c;因此直接通过API接口获取数据难度很大&#xff0c;本文使用selenium来实现新闻内容爬取。 selenium核心代码 知识点&#xff1a; 代码中加了很多的异常处理&#xff0c;保证错误后重试&#xff0c;…

嵌入式交叉编译:ntpdate

下载 Index of /~ntp/ntp_spool/ntp4 交叉编译openssl 交叉编译嵌入式openssl&#xff0c;关键是在config中指定编译器前缀-CSDN博客 交叉编译 DEST_DIR${HOME}/ntp_server CROSS_NAMEaarch64-mix210-linux OPENSSL_DIR${HOME}/build_libsexport PATH/opt/linux/x86-arm/$…

SerDes系列之CTLE均衡技术

CTLE&#xff08;连续时间线性均衡&#xff09;是一种施加在接收器上的线性模拟高通滤波器&#xff0c;通过衰减低频信号分量&#xff0c;以补偿奈奎斯特频率附近的衰减比例&#xff0c;从而实现信道补偿。当低频信号分量向下衰减并推入底噪范围时&#xff0c;CTLE就会失去调节…

C#利用WinForm实现可以查看指定目录文件下所有图片

目录 一、关于Winform 二、创建应用 三、功能实现 四、代码部分 一、关于Winform Windows 窗体是用于生成 Windows 桌面应用的 UI 框架。 它提供了一种基于 Visual Studio 中提供的可视化设计器创建桌面应用的高效方法。 利用视觉对象控件的拖放放置等功能&#xff0c;可…

支付风险智能风控应用与评估指引

伴随宏观经济环境变化、支付监管愈趋从严、金融科技不断创新、支付参与主体日趋多元&#xff0c;支付行业正面临着业务发展与合规经营、支付便捷与安全、数据挖掘与隐私保护等诸多挑战&#xff0c;支付风险的复杂性与日俱增&#xff0c;共同建设安全支付生态的必要性不断凸显&a…