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 人们总是喜欢给出或是得到一个简单明 ...
随机推荐
- 在centos上使用nginx-rtmp实现hls(Http live Streaming)直播
欢迎访问我的个人博客:xie-kang.com 原文地址 以下步骤建议在同一目录(如:~/Downloads)下执行(防止小白把目录弄混乱) 下载并解压nginx-rtmp(建议在~/Download ...
- winform 防止奔溃重启
static class Program { /// <summary> /// 应用程序的主入口点. /// </summary> [STAThread] static vo ...
- Codeforces Round #857 Div.1/Div.2 CF1801/1802 2A~2F 题解
点我看题(Div2) Div 2A. Likes 如果要赞最多,肯定是先放所有的点赞,再放所有移除的操作.如果要最少,那就先把赞分成两种:最后被移除的和没被移除的:最后先放所有被移除的,放一个移除一个 ...
- AI 脸部美容,一键让你变瘦变美变老变年轻
目录 项目效果 项目安装 安装环境 项目使用 项目效果 随着 AI 技术的发展,你不仅随时可以看到自己的老了之后的样子,还能看到自己童年的样子 随着这部分技术的开源,会有越来越多的应用,当然我觉得前景 ...
- oracle学习笔记1 安装 虚拟机 plsql 连接 oracle
第一步就是安装 为了节省资源,运行起来更快捷,首先是在电脑上安装好vm虚拟机, 新建虚拟机,安装xp,也就是把xp光盘文件导入, 接着在虚拟机中下载oracle,解压的话会用到WinRAR,也一并导入 ...
- Java面试——Spring
一.Spring Bean 作用域 [1]singleton:该属性在 IOC容器仅创建一个 Bean实例(单例),IOC容器每次返回的是同一个 Bean实例.[2]prototype:该属性在 IO ...
- MyBatisPlus 实战字典
MyBatis-Plus(简称 MP)是一个 MyBatis 的增强工具包,只做增强不做改变,为简化开发工作.提高生产效率而生. 一.Service CRUD 接口 [说明]:[1]通用 Servic ...
- 基于Locust实现MQTT协议服务的压测脚本
最近在忙业务的间隙,穿插着做了些性能测试. 一.背景简介 业务背景大概介绍一下,就是按照国标规定,车辆需要上传一些指定的数据到ZF的指定平台,同时车辆也会把数据传到企业云端服务上,于是乎就产生了一些性 ...
- 微软开源了一个 助力开发LLM 加持的应用的 工具包 semantic-kernel
在首席执行官萨蒂亚·纳德拉(Satya Nadella)的支持下,微软似乎正在迅速转变为一家以人工智能为中心的公司.最近微软的众多产品线都采用GPT-4加持,从Microsoft 365等商业产品到& ...
- Rainbond的 Gateway API 插件制作实践
Gateway API 作为新一代的流量管理标准,对原有 Ingress 的扩展不规范.移植性差等问题做出了改进.从兼容K8s生态和优化网关体验出发,Rainbond 支持以插件的形式扩展平台网关能力 ...