可爱捏

news/2024/11/15 16:46:20/文章来源:https://www.cnblogs.com/maniubi/p/18548230

可爱捏

题意

给出 \(n\) 个整数 \(a_i(1\le i\le n)\)

求最多选出多少个数,使她们两两的乘积不为完全立方数。

\(n\le 10^5,a_i \le 10^5\)

思路

可以先将 \(a_i\) 分解质因数,将所有指数 \(\bmod 3\),两个数相乘为完全平方数即对应指数相加等于 \(3\)

由此可知对于每个数,和她相乘等于完全立方数的数是唯一确定的。

如果我们能求出指数 \(\bmod 3\) 后的值和对应的数,就能简单的算出答案。

发现每对数之间互相独立,只需要选择数量多的一个即可。

\(O(n\sqrt V)\) 的时间去分解质因数会 TLE,考虑优化。

由于我们求的是指数 \(\bmod 3\) 后的数,只有小于等于 \(\sqrt[3]{V}\) 的质因数的指数才有可能大于等于 \(3\)

我们只需要暴力求出小于等于 \(\sqrt[3]{V}\) 的质因数,其他分类讨论。

\(x\) 表示 \(a_i\) 除掉所有小于等于 \(\sqrt[3]{V}\) 的质因数后剩下的数,

我们发现 \(x\) 最多由两个质数组成,用反证法容易证明:

\(x=pqr\),根据 \(p,q,r > \sqrt[3]{x}\),有 \(pqr > x\),矛盾。

分类讨论:

  1. \(x=1\)

  2. \(x\) 由两个相同质数组成;

  3. \(x\) 由一个或两个不同质数组成。

乘上对应的数即可。

时间复杂度:\(O(n\sqrt[3]{V}+n\log n)\)

代码

#include <bits/stdc++.h>
#define int long long
using namespace std;
const int N = 1e5 + 5;
int n, s[N], ans;
map <int, int> cnt, ne;
set <int> used;
vector <int> _;
signed main() {freopen("lovely.in", "r", stdin);freopen("lovely.out", "w", stdout);ios::sync_with_stdio(0);cin.tie(0); cout.tie(0);cin >> n;for (int i = 1; i <= n; i ++) cin >> s[i];for (int i = 1, c; i <= n; i ++) {int x = 1, y = 1, t = s[i]; // x;指数 mod 3 后的数 y:x对应的数for (int j = 2; j * j * j <= s[i]; j ++) { // 暴力分解for (c = 0; t % j == 0; t /= j, c = (c + 1) % 3);for (int k = 1; c && k <= c; k ++) x *= j;for (int k = 1; c && k <= 3 - c; k ++) y *= j;}if ((int)sqrt(t) * (int)sqrt(t) == t) y *= sqrt(t); // 分类讨论else y *= t * t;x *= t, cnt[x] ++, ne[x] = y, _.push_back(x);}for (auto x : _) {if (x == 1) continue;if (used.count(x) || used.count(ne[x])) continue;ans += max(cnt[x], cnt[ne[x]]); // x 和 x 对应的数只能取一个 个数较大的used.insert(x); used.insert(ne[x]);}cout << ans + (cnt[1] > 0) << "\n";return 0;
}

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

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

相关文章

163邮箱发送邮件通知异常 org.springframework.mail.MailAuthenticationException: Authentication failed

从腾讯企业邮箱切换成163邮箱,邮箱配置经过检查未作调整,网络检查均是正常,但发送邮件时一直报错org.springframework.mail.MailAuthenticationException: Authentication failed。 解决办法: 1.检查smtp服务是否打开(若未打开需要开启)2.客户端授权码需打开3.检查邮箱配…

SpringBoot 3.3.5 集成 mybatis-plus-boot-starter 3.4.2报错

一、环境 JDK:17 SpringBoot:3.3.5 Mybatis-Plus:3.4.2 二、报错信息Consider the following: If you want an embedded database (H2, HSQL or Derby), please put it on the classpath. If you have database settings to be loaded from a particular profile you may nee…

js 日期遍历 小算法

js 日期遍历 小算法给一个完整月份日期 list ,怎样遍历出来 类似一个月 日历呢?勉强写了一个 基于vue<table><tbody><template v-for="n in 5"><tr><template v-for="w in 7"><template v-if="(w-1)+(n-1)*7 <…

2024-2025-1 20241322《计算机基础与程序设计》第八周学习总结

2024-2025-1 20241322 《计算机基础与程序设计》第八周学习总结 作业信息这个作业属于哪个课程 https://edu.cnblogs.com/campus/besti/2024-2025-1-CFAP这个作业要求在哪里 https://www.cnblogs.com/rocedu/p/9577842.html#WEEK08这个作业的目标 功能设计与面向对象设计面向对…

echarts 画一个南丁格尔玫瑰饼图

const datas = [{name: 无信号,value: 5,label: { color: #06B7FFFF }},{name: 正常,value: 8,label: { color: #69D85DFF }},{name: 报警,value: 7,label: { color: #FA6400FF }},{name: 警告,value: 4,label: { color: #F7B500FF }} ]option = {tooltip: {trigger: item,form…

数字孪生技术:如何实现智能制造与城市管理的全新升级

在现代的数字化转型过程中,数字孪生技术成为许多行业实现智能化升级的重要推动力。而作为领先的可视化平台,山海鲸可视化通过其强大的鲸孪生组件,将数字孪生技术与可视化紧密结合,为企业和行业用户提供了一种全新的方式来管理、监控和优化复杂系统。下面我们将详细介绍山海…

【鸣潮,原神PC端启动器】仿二次元手游PC端游戏启动器,以鸣潮为例。

二游GAMELanucher启动器 1.前言许多二次元手游(原神,鸣潮,少女前线)的PC端启动器都是使用Qt做的,正好最近正在玩鸣潮,心血来潮,便仿鸣潮启动器,从头写一个。先下载一个官方版的PC启动器,找到图标,背景图等素材,然后对着界面写代码就行。效果如下2. 划分模块游戏启动…

css动态检测视口屏幕的尺寸

<!DOCTYPE html> <html lang="en"> <head><meta charset="UTF-8"><meta name="viewport" content="width=device-width, initial-scale=1.0"><title>css动态检测屏幕的视口尺寸</title><…

自定义注解进行数据脱敏

前言 有些时候,我们可能对输出的某些字段要做特殊的处理在输出到前端,比如:身份证号,电话等信息,在前端展示的时候我们需要进行脱敏处理,这时候通过自定义注解就非常的有用了。在Jackson中要自定义注解,我们可以通过@JacksonAnnotationsInside注解来实现,如下示例: 一…

openVAS安装记

项目需要使用openVAS 安装步骤 我这里使用的是Ubuntu最新版,因为Ubuntu和debian可通过官网仓库进行安装,因改名为gvm 后续直接上操作 #安装 sudo apt install gvm -y #初始化(可能时间比较长,台会去下载数据库) sudo gvm-setup# 开机自启服务 sudo systemctl enable notus-…

爆火的外卖霸王餐项目,怎么做?

微客云以下是一些做爆火的外卖霸王餐项目的方法: ### 明确项目定位与目标- **确定核心目标**:明确是为了增加新用户、提高复购率、提升品牌知名度还是收集用户反馈等,不同目标决定后续策略 。- **精准定位用户群体**:了解目标用户的消费习惯、喜好、需求及消费能力等,如上…

轮廓线DP

讲解轮廓线DP的两种常见形式以及例题。更新日志概念 类似于状态压缩DP,但我们储存的是轮廓线上的状态。 有些时候,也不需要进行状态压缩,而可以用某一点的状态代表一个区域的状态。 思路 轮廓线就是已经决策的与尚未决策的部分的分界线,我们储存分界线上已经决策过的所有节…