2022-06-19:给出n个数字,你可以任选其中一些数字相乘,相乘之后得到的新数字x, x的价值是x的不同质因子的数量。 返回所有选择数字的方案中,得到的x的价值之和。 来自携程。
2022-06-19:给出n个数字,你可以任选其中一些数字相乘,相乘之后得到的新数字x,
x的价值是x的不同质因子的数量。
返回所有选择数字的方案中,得到的x的价值之和。
来自携程。
答案2022-06-19:
今晚在群里吹牛给耽误了,具体见代码。
代码用rust编写。代码如下:
use rand::Rng;
use std::collections::HashMap;
fn main() {
let n: isize = 10;
let v: isize = 20;
let test_time: i32 = 5000;
println!("测试开始");
for _i in 0..test_time {
let mut arr = random_array(n, v);
let ans1 = sum_of_values1(&mut arr);
let ans2 = sum_of_values2(&mut arr);
if ans1 != ans2 {
println!("出错了!");
for num in &arr {
print!("{} ", num);
}
println!("");
println!("ans1 = {}", ans1);
println!("ans2 = {}", ans2);
break;
}
}
println!("测试结束");
}
// 工具!
// 返回num质数因子列表(去重)
// 时间复杂度,根号(num)
fn primes(mut num: isize) -> Vec<isize> {
let mut ans: Vec<isize> = vec![];
let mut i: isize = 2;
while i * i <= num && num > 1 {
if num % i == 0 {
ans.push(i);
while num % i == 0 {
num /= i;
}
}
i += 1;
}
if num != 1 {
ans.push(num);
}
return ans;
}
fn sum_of_values1(arr: &mut Vec<isize>) -> isize {
return process1(arr, 0, 1);
}
fn process1(arr: &mut Vec<isize>, index: isize, pre: isize) -> isize {
if index == arr.len() as isize {
return primes(pre).len() as isize;
}
let p1 = process1(arr, index + 1, pre);
let p2 = process1(arr, index + 1, pre * arr[index as usize]);
return p1 + p2;
}
fn sum_of_values2(arr: &mut Vec<isize>) -> isize {
// key : 某个质数因子
// value : 有多少个数含有这个因子
let mut cnt_map: HashMap<isize, isize> = HashMap::new();
for num in arr.iter() {
for factor in primes(*num).iter() {
cnt_map.insert(
*factor,
if cnt_map.contains_key(factor) {
*cnt_map.get(factor).unwrap()
} else {
0
} + 1,
);
}
}
let n = arr.len() as isize;
let mut ans = 0;
// count :含有这个因子的数,有多少个
// others : 不含有这个因子的数,有多少个
for (_, count) in cnt_map.iter() {
let others = n - count;
ans += (power(2, *count) - 1) * power(2, others);
}
return ans;
}
fn power(mut num: isize, mut n: isize) -> isize {
if n == 0 {
return 1;
}
let mut ans = 1;
while n > 0 {
if (n & 1) != 0 {
ans *= num;
}
num *= num;
n >>= 1;
}
return ans;
}
// 为了测试
fn random_array(n: isize, v: isize) -> Vec<isize> {
let mut arr: Vec<isize> = vec![];
for _i in 0..n {
arr.push(rand::thread_rng().gen_range(0, v) + 1);
}
return arr;
}
执行结果如下:

2022-06-19:给出n个数字,你可以任选其中一些数字相乘,相乘之后得到的新数字x, x的价值是x的不同质因子的数量。 返回所有选择数字的方案中,得到的x的价值之和。 来自携程。的更多相关文章
- springMVC 返回类型选择 以及 SpringMVC中model,modelMap.request,session取值顺序
springMVC 返回类型选择 以及 SpringMVC中model,modelMap.request,session取值顺序 http://www.360doc.com/content/14/03 ...
- 科普:为什么 String hashCode 方法选择数字31作为乘子
作者:coolblog 此文章转载自:https://segmentfault.com/a/1190000010799123 1. 背景 某天,我在写代码的时候,无意中点开了 String hashC ...
- P2034 选择数字
P2034 选择数字 题目描述 给定一行n个非负整数a[1]..a[n].现在你可以选择其中若干个数,但不能有超过k个连续的数字被选择.你的任务是使得选出的数字的和最大. 错误日志: longlong ...
- codevs 3327 选择数字
3327 选择数字 时间限制: 1 s 空间限制: 256000 KB 题目描述 Description 给定一行n个非负整数a[1]..a[n].现在你可以选择其中若干个数,但不能有超过k个连续 ...
- input只读属性 设置和移除 选择数字
设置只读属性 $('#stage').attr("readonly", "readonly"); 移除 只读属性 $("input").r ...
- codevs3327选择数字(单调队列优化)
3327 选择数字 时间限制: 1 s 空间限制: 256000 KB 题目等级 : 钻石 Diamond 题目描述 Description 给定一行n个非负整数a[1]..a[n].现 ...
- python c++ 混合编程中python调用c++string返回类型的函数,python中返回为数字的解决办法
本随笔解决 Python使用ctypes 调用c++dll 字符串返回类型函数,在python中显示为数字:原文解决方案见so: https://stackoverflow.com/questions ...
- P2034 选择数字——线性dp(单调队列优化)
选择数字 题目描述 给定一行 \(n\) 个非负整数 \(a[1]...a[n]\) .现在你可以选择其中若干个数,但不能有超过 \(k\) 个连续的数字被选择.你的任务是使得选出的数字的和最大. 输 ...
- 「单调队列优化DP」P2034 选择数字
「单调队列优化DP」P2034 选择数字 题面描述: 给定一行n个非负整数a[1]..a[n].现在你可以选择其中若干个数,但不能有超过k个连续的数字被选择.你的任务是使得选出的数字的和最大. 输入格 ...
- [SQL]用于提取组内最新数据,左连接,内连接,not exist三种方案中,到底谁最快?
本作代码下载:https://files.cnblogs.com/files/xiandedanteng/LeftInnerNotExist20191222.rar 人们总是喜欢给出或是得到一个简单明 ...
随机推荐
- 01.html大致主体格式
<!DOCTYPE html> 不是HTML标签,就是文档声明标签 告诉浏览器使用哪种html版本来显示网页,其必须在文档中的最前面位置,要放在<html>标签之前, < ...
- vTaskList() 介绍
vTaskList() 使用注意:使用 vTaskList() 前需使能: make menuconfig -> Component config -> FreeRTOS -> En ...
- python字符操作超全总结
在python中,字符串是数据类型之一,属于不可变序列. 转义字符的使用 转义字符是指使用反斜杠"\"对一些特殊字符进行转义.几个常用的转义字符如下: \ -续行 \n -换行 ...
- [HCTF 2018]WarmUp 1
主页面是一个滑稽 得到source.php 观看源码,提示source.php 访问看到源码 <?php highlight_file(__FILE__); class emmm { publi ...
- 一篇博客带你学会MyBatis
概念 MyBatis是一款持久层框架,用于简化JDBC操作(JavaEE三层架构:表现层(用来做页面的代码),业务层(业务逻辑代码),持久层(对数据库操作的代码))(框架就是一个半成品软件,是一套可重 ...
- Python通过ssh登录实现报文监听
Python自动化ssh登录目标主机,实现报文长度length 0监听,并根据反馈信息弹窗报警: 代码比较简陋,后续记得优化改进. #_*_coding:utf-8 _*_ #!/usr/bin/py ...
- 除select外查询数据的另一种姿势
1.24 1.[GYCTF2020]Blacklist buuctf上的题目 1.解题过程 输入1会返回一个数组,加上单引号就报错了,说明存在注入 以前做过类似的估计是堆叠注入,尝试一下 注入成功 正 ...
- IDEA集成Gitee
配置Git 在设置里面点击Git,点击选择git安装目录下的bin目录下的git.exe,点击Test,出现版本号,证明配置成功. 配置码云 在设置里面按照下图步骤,即可成功配置码云 安装Gitee插 ...
- [CTF]Caser-Pass-Tool1-C++工具
刷pico遇到一个凯撒密码加密题,顺手写了个解密工具,但是暂时没有解决到边界字母的升降档问题 #include<iostream> using namespace std; int mai ...
- 《爆肝整理》保姆级系列教程-玩转Charles抓包神器教程(13)-Charles如何进行Mock和接口测试
1.简介 Charles最大的优势在于抓包分析,而且我们大部分使用的功能也在抓包的功能上,但是不要忘记了,Charles也可以做接口测试.至于Mock,其实在修改请求和响应数据哪里就已经介绍了,宏哥就 ...