2024年4月13日美团春招实习试题【第四题:乘积因子数】-题目+题解+在线评测【二分】

2024年4月13日美团春招实习试题【第四题:乘积因子数】-题目+题解+在线评测【二分】

  • 题目描述:
    • 输入描述
    • 输出描述
    • 样例
  • 解题思路一:python
  • 解题思路二:c++
  • 解题思路三:0

题目描述:

塔子哥拿到了一个数组,她有q次查询,每次询问一个区间内所有元素的乘积有多少因子。你能帮帮她吗?

注:由于数组元素过多,所以是按连续段的方式给定。例如,[1,1,2,3,3,3]有2个1,1个2,3个3,因此表示为<2,1>,<1,2>,< 3,3>。

输入描述

第一行输入两个正整数n,m,代表数组的大小,以及连续段的数量。 接下来的m行,每行输入两个正整数 u i , v i u_i,v_i ui,vi,代表一段区间内有 v i v_i vi u i u_i ui

接下来的一行输入一个正整数q,代表询问次数。 接下来的q行,每行输入两个正整数l,r,代表询问的是第l个数到第r个数的乘积的因子数量

1 ≤ n ≤ 1 0 14 1\le n\le 10^{14} 1n1014

1 ≤ m , q ≤ 1 0 5 1\le m,q\le 10^5 1m,q105

1 ≤ u _ i ≤ 10 1\le u\_i\le 10 1u_i10

1 ≤ v _ i ≤ 1 0 9 1\le v\_i\le 10^9 1v_i109

1 ≤ l , r ≤ n 1\le l,r\le n 1l,rn

保证所有的 v i v_i vi之和恰好等于n

输出描述

输出q行,每行输出一个整数,代表最终的乘积因子数量。由于答案可能过大,请对109+7取模

样例

输入

6 3
1 2
2 1
3 3
2 
1 3
2 6

输出

2
8

OJ链接:
https://codefun2000.com/p/P1822

乘积因子数量是指一个数的所有因子(包括1和它本身)的个数。要计算一个数的乘积因子数量,可以按照以下步骤进行:

将这个数分解成质因数的乘积。质因数是指不能再进行因数分解的素数,比如2、3、5、7等。
对每个质因数的指数加1,然后将它们相乘即可得到乘积因子数量。
举个例子,我们来计算数值36的乘积因子数量:

首先,将36分解成质因数的乘积:36=22 ×3 2
对每个质因数的指数加1:(2+1)×(2+1)=3×3=9
所以,36的乘积因子数量为9个。

解题思路一:python

在这里插入图片描述

# from bisect import bisect_left
n, m = map(int, input().split())
mod = 1000000007table = {1: [0, 0, 0, 0],2: [1, 0, 0, 0],3: [0, 1, 0, 0],4: [2, 0, 0, 0],5: [0, 0, 1, 0],6: [1, 1, 0, 0],7: [0, 0, 0, 1],8: [3, 0, 0, 0],9: [0, 2, 0, 0],10: [1, 0, 1, 0]
}index = [0 for i in range(1 + m)]
array = [0 for i in range(1 + m)]
pre = [[0 for i in range(4)] for j in range(1 + m)]for i in range(1, m + 1):u, v = map(int, input().split())array[i] = uu_list = table[u]for j in range(4):pre[i][j] = (pre[i - 1][j] + u_list[j] * v % mod) % modindex[i] = index[i - 1] + vdef check(index, m, x):l = 1r = m + 1while l < r:mid = (l + r) >> 1# if index[mid] == x:#     return midif index[mid] < x:l = mid + 1else:r = midreturn lq = int(input())
for i in range(q):l, r = map(int, input().split())ll = check(index, m, l)rl = check(index, m, r)# print(ll, rl)ans = 1lu_list = table[array[ll]]ru_list = table[array[rl]]for j in range(4):if ll == rl:ans = ((r - l + 1) * lu_list[j] % mod + 1) * ans % modelse:tmp = (index[ll] - l + 1) % mod * lu_list[j] % modif ll < rl:tmp += (r - index[rl - 1]) % mod * ru_list[j] % modif ll + 1 < rl:tmp = (tmp + (pre[rl - 1][j] - pre[ll][j])) % mod# tmp = (tmp % mod + mod) % modans = (tmp + 1) * ans % modprint(ans)

时间复杂度:O(qlogn)
空间复杂度:O(m)前缀和

解题思路二:c++

#include <bits/stdc++.h>using namespace std;typedef long long LL;
#define endl '\n'int main()
{cin.tie(0)->sync_with_stdio(false);LL n, m, q;cin >> n >> m;const int mod = 1e9 + 7;vector<int> primes = {2, 3, 5, 7};vector<LL> s(m + 1);vector<int> a(m + 1);vector<array<LL, 4>> pre = vector<array<LL, 4>>(m + 1, {0});auto get = [&](int x) -> vector<int> {vector<int> cnt(4, 0);for (int j = 0;j < 4;++ j) {while(x % primes[j] == 0) {x /= primes[j];++ cnt[j];}}return cnt;};for (int i = 1; i <= m; ++i){cin >> a[i] >> s[i];pre[i] = pre[i - 1];vector<int> cnt = get(a[i]);for (int j = 0;j < 4;++ j) {pre[i][j] = (pre[i][j] + cnt[j] * s[i]) % mod;}s[i] += s[i - 1];}cin >> q;while (q --) {LL l, r;cin >> l >> r;int L = lower_bound(s.begin(), s.end(), l) - s.begin();int R = lower_bound(s.begin(), s.end(), r) - s.begin();vector<int> cnt(4, 0);vector<int> cntl = get(a[L]), cntr = get(a[R]);LL ans = 1;for (int j = 0;j < 4;++ j) {if (L == R) {ans = ((r - l + 1) * cntl[j] % mod + 1) * ans % mod;} else {LL t = (s[L] - l + 1) % mod * cntl[j] % mod;if (L < R) {t += (r - s[R - 1]) % mod * cntr[j] % mod;}if (L + 1 < R) {t += pre[R - 1][j] - pre[L][j];}t = (t % mod + mod) % mod;ans = (t + 1) * ans % mod;}}cout << ans << endl;}
}

时间复杂度:O(qlogn)
空间复杂度:O(m)前缀和

解题思路三:0


时间复杂度:O(n)
空间复杂度:O(n)

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

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

相关文章

HTTP/1.1特性总结

优点 【简单&#xff0c;灵活和易于扩展&#xff0c;应用广泛和跨平台】 1.简单&#xff1a; http基本的报文格式就是headerbody&#xff0c;头部信息也是key-value简单的文本形式&#xff0c;易于理解&#xff0c;降低了学习和使用的门槛 2.灵活和易于扩展&#xff1a; &…

Redis 配置与使用 (Linux 虚拟机Windows客户端)

Centos7 安装Redis详细教程 - JcongJason - 博客园 (cnblogs.com) 安装 下载redis安装包并解压 # 下载&#xff0c;我是在root下执行的下载&#xff0c;所以我的下载目录为&#xff1a;/root/redis-5.0.5&#xff0c;这里按照自己的实际情况调整 wget https://download.redi…

Java常用的几种设计模式

单例模式&#xff1a; volatile /ˈvɒlətaɪl/ 不稳定的&#xff1b;Java中的一个关键字&#xff0c;主要用于修饰变量。其主要作用是保证变量的可见性和有序性。 单例模式有两种模式&#xff0c;懒汉模式和饿汉模式。一个类private修饰其构造方法使其无法对外new出来。 饿…

Methoxy PEG Glutaric Acid可以改善物质的溶解性、稳定性和生物相容性

【试剂详情】 英文名称 mPEG-GA&#xff0c;mPEG-Glutaric Acid&#xff0c; Methoxy PEG GA&#xff0c; Methoxy PEG Glutaric Acid 中文名称 聚乙二醇单甲醚戊二酸&#xff0c; 甲氧基-聚乙二醇-戊二酸 外观性状 由分子量决定&#xff0c;固体或液体 分子量 400&…

浅谈Java的synchronized 锁以及synchronized 的锁升级

在Java中&#xff0c;synchronized关键字用于实现线程间的同步&#xff0c;确保同一时刻只有一个线程能够访问被同步的代码块或方法。当一个线程获得synchronized锁定后&#xff0c;其他试图访问同一锁的线程将被阻塞&#xff0c;直到锁被释放。 synchronized锁有两种基本形式…

为什么说六西格玛培训公司是企业问题的“终结者”

随着六西格玛管理方法的走红&#xff0c;六西格玛培训公司应运而生&#xff0c;致力于帮助企业解决各种核心问题&#xff0c;实现业绩的飞跃。那么&#xff0c;六西格玛培训公司究竟能为企业解决哪些问题&#xff1f;又为什么说六西格玛培训公司是企业问题的“终结者”呢&#…

深入理解全链路监控:技术驱动的业务保障

全链路监控是一种技术手段&#xff0c;通过监控应用程序从用户请求入口到后端服务的完整调用路径&#xff0c;实现对整个系统性能和健康状况的实时掌握。那么&#xff0c;为什么我们需要全链路监控呢&#xff1f; 为什么需要全链路监控 在传统的单一应用系统中&#xff0c;我…

配电站房黄色灯智能识别:原理与应用---豌豆云

今天豌豆云将深入探讨配电站房黄色灯智能识别的原理及其应用&#xff0c;为大家揭示这一技术在电力系统中的作用。 关键词&#xff1a;配电站房;黄色灯;智能识别;原理;应用 在配电站房的日常运维中&#xff0c;黄色灯作为重要的指示信号&#xff0c;对于运维人员来说具有极高…

第47期 | GPTSecurity周报

GPTSecurity是一个涵盖了前沿学术研究和实践经验分享的社区&#xff0c;集成了生成预训练Transformer&#xff08;GPT&#xff09;、人工智能生成内容&#xff08;AIGC&#xff09;以及大语言模型&#xff08;LLM&#xff09;等安全领域应用的知识。在这里&#xff0c;您可以找…

Spring中事务的详细介绍,附带代码示例

文章目录 1、事务的四大特性2、Spring事务的实现方式3、数据库怎么处理事务4、处理事务的方式4、事务的隔离级别5、事务的超时时间6、事务的传播行为7、Spring事务处理方案1、中小项目使用2、大型项目使用AspectJ框架 4、Spring项目实现事务示例5、SpringBoot项目实现事务示例 …

为什么要将原始数据从bufPtr复制到data中

if (memcpy_s(data DWORD_SERIALIZE_SIZE, sizeNewBuf - DWORD_SERIALIZE_SIZE, bufPtr, size)) {delete[] data;return;} 将原始数据从bufPtr复制到data中是为了构建一个完整的待发送数据包&#xff0c;其中包含了额外的头部信息&#xff08;如数据大小&#xff09;&#x…

【第3期】PMC对话标杆用户:兆原数通在SeaTunnel的应用实践

&#x1f4e3;随着技术快速发展&#xff0c;企业对数据系统的现代化改造需求日益增加。在这种背景下&#xff0c;如何在保持业务连续性的同时&#xff0c;实现数据系统的平滑迁移与升级呢&#xff1f;加入我们的本期技术访谈节目&#xff0c;来听听李洪军老师分享他们如何利用S…

算法题解记录11+++从前序与中序遍历序列构造二叉树(百日筑基)

题目描述&#xff1a; 给定两个整数数组 preorder 和 inorder &#xff0c;其中 preorder 是二叉树的先序遍历&#xff0c; inorder 是同一棵树的中序遍历&#xff0c;请构造二叉树并返回其根节点。 示例 1: 输入: preorder [3,9,20,15,7], inorder [9,3,15,20,7] 输出: [3,…

树莓派驱动开发--iic篇(JY901S陀螺仪的三轴角度简单读取)

前言&#xff1a;既然大家都到了这步&#xff0c;想必对驱动开发有着一定的理解啦吧&#xff01;&#xff01;那我在前面说一下流程&#xff1a; 修改编译设备树》》》编写编译驱动文件》》》编写编译app文件》》》ftp挂载将前面3复制到树莓派的对应位置》》》加载驱动模块》》…

2024软件测试自动化框架都有哪些?

软件行业正迈向自主、快速、高效的未来。为了跟上这个高速前进的生态系统的步伐&#xff0c;必须加快应用程序的交付时间&#xff0c;但不能以牺牲质量为代价。快速实现质量是必要的&#xff0c;因此质量保证得到了很多关注。为了满足卓越的质量和更快的上市时间的需求&#xf…

策略者模式(代码实践C++/Java/Python)————设计模式学习笔记

文章目录 1 设计目标2 Java2.1 涉及知识点2.2 实现2.2.1 实现两个接口飞行为和叫行为2.2.2 实现Duck抽象基类&#xff08;把行为接口作为类成员&#xff09;2.2.3 实现接口飞行为和叫行为的具体行为2.2.4 具体实现鸭子2.2.5 模型调用 3 C&#xff08;用到了大量C2.0的知识&…

linux nohup命令启动jar包 如何取消nohup日志打印

你好&#xff0c;如果你想在使用nohup启动jar包时不输出日志&#xff0c;可以将标准输出和标准错误重定向到/dev/null&#xff0c;这样日志就不会显示在终端上了。你可以这样做&#xff1a; 日志目录指向/dev/null系统空文件&#xff0c;不可改其他路径必须dev nohup java -ja…

数据库SQL语言实战(三)

删除操作 本篇文章重点在于SQL中的各种删除操作 题目一 删除表中的学号不全是数字的那些错误数据&#xff0c;学号应该是数字组成&#xff0c;不能够包含字母空格等非数字字符。方法之一&#xff1a;用substr函数&#xff0c;例如Substr(sid,1,1)返回学号的第一位&#xff0…

Claude3与GPT4全面对比

Claude 3是由人工智能公司Anthropic推出的最新大语言模型,一经推出就在学术界和普通用户中引起轰动。Claude 3在逻辑推理、数学、编程、多语言理解和视觉等方面表现出色,被认为全面超越了此前的GPT-4模型。一些用户甚至认为Claude 3展现出了自我意识的迹象,但专家们对此持怀疑态…

C++常考面试题(第二篇)

【题目 16】拷贝构造函数的格式和作用&#xff0c;自动调用拷贝构造函数的几种情形&#xff1f; 格式&#xff1a;没有返回值 函数名和类名相同 参数&#xff1a;const person& 类型引用 作用&#xff1a;逐个给成员变量进行赋值三种情形下会调用拷贝构造函数 (1) 当用一…