Leetcode.1735 生成乘积数组的方案数

题目链接

Leetcode.1735 生成乘积数组的方案数 rating : 2500

题目描述

给你一个二维整数数组 q u e r i e s queries queries ,其中 q u e r i e s [ i ] = [ n i , k i ] queries[i] = [n_i, k_i] queries[i]=[ni,ki] 。第 i i i 个查询 q u e r i e s [ i ] queries[i] queries[i] 要求构造长度为 n i n_i ni 、每个元素都是正整数的数组,且满足所有元素的乘积为 k i k_i ki ,请你找出有多少种可行的方案。由于答案可能会很大,方案数需要对 1 0 9 + 7 10^9 + 7 109+7 取余 。

请你返回一个整数数组 a n s w e r answer answer,满足 a n s w e r . l e n g t h = = q u e r i e s . l e n g t h answer.length == queries.length answer.length==queries.length ,其中 a n s w e r [ i ] answer[i] answer[i] 是第 i i i 个查询的结果。

示例 1:
输入:queries = [[2,6],[5,1],[73,660]]
输出:[4,1,50734910]
解释:每个查询之间彼此独立。
[2,6]:总共有 4 种方案得到长度为 2 且乘积为 6 的数组:[1,6],[2,3],[3,2],[6,1]。
[5,1]:总共有 1 种方案得到长度为 5 且乘积为 1 的数组:[1,1,1,1,1]。
[73,660]:总共有 1050734917 种方案得到长度为 73 且乘积为 660 的数组。1050734917 对 109 + 7 取余得到 50734910 。
示例 2:
输入:queries = [[1,1],[2,2],[3,3],[4,4],[5,5]]
输出:[1,2,3,10,5]
提示:
  • 1 ≤ q u e r i e s . l e n g t h ≤ 1 0 4 1 \leq queries.length \leq 10^4 1queries.length104
  • 1 ≤ n i , k i ≤ 1 0 4 1 \leq n_i, k_i \leq 10^4 1ni,ki104

解法:组合数学 + 质因数分解

对于 [ n i , k i ] [n_i, k_i] [ni,ki] 就等价于 n i n_i ni 个相同的箱子,要把 k i k_i ki 的所有 质因子 放入到这 n i n_i ni 箱子中,有的箱子可以为空

例如 [ 2 , 6 ] [2, 6] [2,6],就是有 2 2 2 个箱子 [ ] [ ] [\ ] [\ ] [ ][ ] n = 2 × 3 n = 2 \times 3 n=2×3。一共有 4 4 4 种放法:

  • [ 2 ∗ 3 ] [ ] [2 * 3 ] [\ ] [23][ ]
  • [ ] [ 2 ∗ 3 ] [\ ] [2 * 3] [ ][23]
  • [ 2 ] [ 3 ] [2] [3] [2][3]
  • [ 3 ] [ 2 ] [3] [2] [3][2]

我们可以发现,对于不同的质因子都可以单独计算。假设这里把质因子 2 2 2 看作是小球 A A A,把质因子 3 3 3 看作是小球 B B B

  • 把小球 A A A 放到两个箱子中,一共有两种放法: [ A ] [ ] , [ ] [ A ] [A] [\ ], [\ ] [A] [A][ ],[ ][A]
  • 把小球 B B B 放到两个箱子中,一共有两种放法: [ B ] [ ] , [ ] [ B ] [B] [\ ], [\ ] [B] [B][ ],[ ][B]

所以一共有 2 × 2 = 4 2 \times 2 = 4 2×2=4 种放法。

假设一共有 m m m 个箱子, n n n 个球,把 n n n 个球放进 m m m 个箱子,并且允许出现空箱子的放法有多少种。

等价于 一共有 n + m n + m n+m 个球,要把这 n + m n + m n+m 个球分割成 m m m 部分,也就是 C ( n + m − 1 , m − 1 ) = C ( n + m − 1 , n ) C(n + m - 1, m - 1) = C(n + m - 1, n) C(n+m1,m1)=C(n+m1,n)

例如:假设有 3 3 3 个小球,要放到 4 4 4 个盒子中。

在这里插入图片描述

等价于 有 3 + 4 3 + 4 3+4 个小球,再把小球分为 4 4 4 个部分的方案数量

在这里插入图片描述

3 + 4 3 +4 3+4 个小球,一共有 3 + 4 − 1 = 6 3 + 4 - 1 = 6 3+41=6 个位置,要把这 7 7 7 个小球分为 4 4 4 个部分,直接从 6 6 6 个隔板中选 4 4 4 个插入,即 C ( 6 , 4 ) C(6, 4) C(6,4)

推广到 n n n 个小球, m m m 个箱子就是 C ( n + m − 1 , m − 1 ) = C ( n + m − 1 , n ) C(n + m - 1, m - 1) = C(n + m - 1, n) C(n+m1,m1)=C(n+m1,n)

那么我们就可以处理出 k i k_i ki 的所有质因数,也就是求出所有 小球,最后计算方案即可。

时间复杂度: ( ( N + l o g K ) l o g K ) ((N + logK) logK) ((N+logK)logK)

C++代码:

using LL = long long;
const int MOD = 1e9 + 7;
const int N = 1e4 + 15;
LL c[N][15];auto _ = []()
{c[0][0] = 1;for(int i = 1;i < N;i++){c[i][0] = 1;for(int j = 1;j < 15;j++) c[i][j] = (c[i - 1][j] + c[i - 1][j - 1]) % MOD;}return 0;
}();class Solution {
public:vector<int> waysToFillArray(vector<vector<int>>& queries) {vector<int> ans;for(auto q:queries){int n = q[0], k = q[1];LL res = 1;auto x = k;for(int i = 2;i <= x / i;i++){if(x % i == 0){int cnt = 0;while(x % i == 0){x /= i;cnt++;}res = res * c[cnt + n - 1][cnt] % MOD;}}if(x > 1) res = res * n % MOD;ans.push_back(res);}return ans;}
};

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

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

相关文章

JAVA SDK 整合 AI 大语言模型

目前主流模型厂商的 SDK 并没有很好的支持 JAVA 环境&#xff0c;主流还是使用的 Python &#xff0c;如果希望将 AI 功能集成到业务中来&#xff0c;则需要找找有没有一些现成的开源项目&#xff0c;但是这种项目一般需要谨慎使用&#xff0c;以防有偷取 app_key 等风险问题 前…

如何在Linux下使用git(几步把你教会)

目录 一、注册github账号 二、新建项目 1.点击右上角自己的头像&#xff0c;然后点击Your repositories。 2.点击New。 3.配置新项目信息。 4.点击Create repository即可成功创建。 三、安装git 四、配置git 五、初始化git仓库 1.先进入想要使用git的目录。 2.初始化…

数据时代的数字企业

1.写在前面 讨论数据治理在数字企业中的影响和必要性&#xff0c;并介绍数据治理的核心内容和实践方法。作者强调了数据质量、数据安全、数据隐私和数据合规等方面是数据治理的核心内容&#xff0c;并介绍了具体的实践措施和案例分析。企业需要重视这些方面以实现数字化转型和…

多孔散热器简介

今天给大家分享关于多孔散热器的一些构造、散热情况。 更多资讯&#xff0c;请关注B站【莱歌数字】&#xff0c;有视频教程~~ 常见的散热器通常由不渗透水、空气和其他液体的无孔材料制成。固体铝和铜是行业标准。 但散热器也可以作为半多孔材料或多孔涂层。研究和应用表明&…

防静电监控系统全方位防静电监测,保障产品质量

在当今高度精密的电子制造领域&#xff0c;产品质量的保障至关重要。哪怕是微小的静电干扰&#xff0c;都可能导致电子元件损坏、性能下降&#xff0c;从而影响整个产品的质量和可靠性。为了应对这一挑战&#xff0c;某电子工厂车间引入了先进的防静电监控系统&#xff0c;实现…

11g rac db安装软件时找不到 节点的问题处理

问题 在安装11.2.0.4db软件时数据库软件无法识别集群的两个主机 处理方法 [oracleracdg1-1 database]$ cd /u01/app/oraInventory/ [oracleracdg1-1 oraInventory]$ ls ContentsXML logs oraInst.loc orainstRoot.sh oui [oracleracdg1-1 oraInventory]$ cd ContentsXML/…

Qt | QSS自定义部件的外观

01、简介 一、自定义部件外观基础 1、有 3 种方法可实现自定义界面外观:重新实现 paintEvent()函数,使用 QStyle 类的绘制函数,子类化 QStyle,本小节仅介绍方法 1 和 2 的使用方式,方法 3 见下一节。 2、方法一:Qt 通过 QWidget::paintEvent()函数实现界面外观的绘制,…

Linux运行jar包:Invalid or corrupt jarfile

你们好&#xff0c;我是金金金。 场景 maven打包springboot项目得到一个jar包&#xff0c;我通过xshell上传到虚拟机环境里面&#xff0c;试图运行它&#xff0c;结果Invalid or corrupt jarfile&#xff1a;jar 文件无效或损坏 排查 jdk版本是否一致&#xff1f;结果&#xf…

参数页面设计

目录 一 设计原型 二 后台源码 一 设计原型 二 后台源码 namespace 参数页面设计 {public partial class Form1 : Form{List<PMs> PMs new List<PMs>();public Form1(){InitializeComponent();}private void Form1_Load(object sender, EventArgs e){for (int …

深入解析 Python dataclass:类属性与类方法解释

文章目录 dataclass实例属性和类属性自动设置属性 实例方法静态方法&#xff08;staticmethod&#xff09;和 类方法&#xff08;classmethod&#xff09;静态方法类方法 dataclass dataclass 是 Python 3.7 引入的一个装饰器&#xff0c;用于简化类的定义。 使用 dataclass …

Django教程(001):安装及快速上手

1.1 Django安装 pip install django安装之后 c:\python39-python.exe-Scripts-pip.exe-django-admin.exe【安装django之后&#xff0c;工具&#xff0c;创建django项目】-Lib-内置模块-site-packages-flask-django(安装django之后&#xff0c;【django框架源码】)如下图&…

思考题:相交的几何图形

给定不超过 26 个几何图形&#xff0c;每个图形都有一个唯一大写字母作为其编号。 每个图形在平面中的具体位置已知&#xff0c;请你判断&#xff0c;对于每个图形&#xff0c;有多少个其他图形与其存在交点。 在判断交点时&#xff0c;只考虑边与边相交的情况&#xff0c;如…

AIGC+艺术=教育变革?

在数字化时代的浪潮中&#xff0c;技术的每一次跃进都深刻影响着社会的各个领域&#xff0c;教育亦不例外。近年来&#xff0c;人工智能生成内容&#xff08;AIGC&#xff09;技术的兴起&#xff0c;为艺术教育领域带来了前所未有的变革机遇。当AIGC与艺术相结合&#xff0c;我…

vscode 删除不用的ssh远程连接

使用vscode连接一个远程服务器发现联不通&#xff0c;但是使用mobaxterm是可以通的&#xff0c;最后原因发现是这个服务器ip与之前连过的另一台相同&#xff0c;和之前连接保存的信息冲突了 解决办法&#xff1a; 使用记事本打开这个路径下的known_hosts(最好备份一下)&#x…

电脑打印文件怎么操作?

有打印机用户的打印操作 对于已经拥有打印机的用户来说&#xff0c;打印文件通常是一个简单的步骤。首先&#xff0c;你需要将你的文件&#xff08;如Word、PDF、PPT等&#xff09;在电脑上打开。然后&#xff0c;点击菜单栏中的“打印”选项&#xff0c;或者快捷键CtrlP&…

CRMEB-PHP多商户版安装系统配置清单

系统在安装完成之后&#xff0c;需要对系统进行一系列的配置&#xff0c;才能正常使用全部的功能&#xff0c;以下是官方整理的配置清单 平台后台 商户后台

实例080 进度条百分比显示

本文仅供学习交流&#xff0c;严禁用于商业用途&#xff0c;如本文涉及侵权请及时联系本人将于及时删除 目录 1.实例说明 2.技术要点 3.实现过程 4.实例结果 5.示例拓展 2.10 进度条控件典型实例进度条控件&#xff08;Progress&#xff09;用于显示程序的进度&#xff0c…

NetSuite 文件夹 Group Restriction的探究

同一个角色&#xff0c;为什么相同的文件&#xff0c;有的用户可以看&#xff0c;而有的用户不能看呢&#xff1f;这其中与一个隐藏功能相关&#xff0c;即文件夹的Restriction相关&#xff0c;其中一个非常典型的点是Group Restriction&#xff08;组限制&#xff09;&#xf…

Web渗透:XXE-XML外部实体漏洞

XML External Entity (XXE) 漏洞是一种注入攻击&#xff0c;利用不安全的XML解析器来执行各种恶意操作&#xff0c;如读取本地文件、执行远程代码、发起拒绝服务攻击等&#xff1b;此漏洞的根本原因在于XML标准允许在文档中定义外部实体&#xff0c;并在解析时进行解析和替换。…

Navicat连接服务器MySQL

Navicat连接服务器MySQL 1. Navicat连接服务器MySQL2. 如何查看MySQL用户名和密码3. 修改MySQL登录密码4. 安装MySQL(Centos7)遇到错误和问题1. error 1045 (28000): access denied for user rootlocalhost (using password:yes) 1. Navicat连接服务器MySQL 选择数据库 直接使用…