恶补费马小定理和组合数

news2024/11/15 3:53:09

前言:我们平时遇到的组合数如果用杨辉三角型做的话,预处理的复杂度是 n 2 n^2 n2 ,遇到大一点的数据就会爆炸

我们怎么去优化呢
C ( n , k ) = n ! k ! ⋅ ( n − k ) ! m o d    mod C(n, k) = \frac{n!}{k! \cdot (n-k)!} \mod \text{mod} C(n,k)=k!(nk)!n!modmod
答案太大我们会进行取模,那么我们就可以利用费马小定理

在这里插入图片描述
所以我们可以对我们的分母乘积进行逆元操作
但是我们的阶乘进行预处理


我们再来看一下下面这个题目,分析我们得知,只有我们选取的 1 的个数是大于等于 k /2 +1 的,才是有价值的
所以我们可以用组合数的方法进行


题目地址
在这里插入图片描述


有一个易错点,我们预处理的时候,阶乘的 a[ 0 ] = 1 , 否则会出错


#include<bits/stdc++.h>
using namespace std;

#define int long long
// 1 2 3
const int Mod = (int)1e9 + 7;
int n, k;
const int N = (int)2e5 + 5;
int a[N];

void ini() {
	a[1] = 1; a[0] = 1;
	for (int i = 2; i < N; i++) {
		a[i] = (a[i - 1] * i) % Mod;
	}
}

int qw(int x, int p) {
	int t = 1;
	while (p) {
		if (p & 1) t = (t * x) % Mod;
		x = (x * x) % Mod;
		p >>= 1;
	}
	return t;
}

int C(int n, int k) {
	if (n < k) return 0LL;
	return (a[n] % Mod) * (qw(a[n - k] * a[k] % Mod, Mod - 2) % Mod) % Mod;
}

signed main() {
	int t; ini();
	//for (int i = 1; i <= 10; i++) cout << a[i] << endl;
	//cout << qw(2, 2);
	cin >> t;
	while (t--) {
		cin >> n >> k;
		int one = 0;
		for (int i = 1; i <= n; i++) {
			int u; cin >> u;
			if (u) one++;
		} 
		int ans = 0;
		for (int i = k / 2 + 1; i <= min(one, k); i++) {
			int t = C(one, i) * C(n - one, (k - i)) % Mod;
			ans = (ans + t) % Mod;
		}
		cout << ans << endl;
	}

}

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

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

相关文章

深入剖析大模型安全问题:Langchain框架的隐藏风险

随着大模型热度持续&#xff0c;基于大模型的各类应用层出不穷。Langchain 作为一个以 LLM 模型为核心的开发框架&#xff0c;可以帮助我们灵活地创建各类应用&#xff0c;同时也为大模型的应用引入新的安全隐患。从今年 4 月 Langchain 被爆出在野 0day 漏洞开始&#xff0c;各…

PHP项目任务系统小程序源码

&#x1f680;解锁高效新境界&#xff01;我的项目任务系统大揭秘&#x1f50d; &#x1f31f; 段落一&#xff1a;引言 - 为什么需要项目任务系统&#xff1f; Hey小伙伴们&#xff01;你是否曾为了杂乱的待办事项焦头烂额&#xff1f;&#x1f92f; 或是项目截止日逼近&…

LeetCode刷题笔记第191题:位1的个数

LeetCode刷题笔记第191题&#xff1a;位1的个数 题目&#xff1a; 想法&#xff1a; 通过位运算判断二级制形式中有多少个1&#xff0c;代码及解释如下&#xff1a; class Solution:def hammingWeight(self, n: int) -> int:return sum(1 for i in range(32) if n & …

十三、list 类

Ⅰ . list 的介绍和使用 01 初识 list 我们已经学习过 string 和 vector 了&#xff0c;想必大家已经掌握了查文档的能力 现在我们去学习如何使用 list &#xff0c;最好仍然打开文档去学习 list - C Reference ① list 是一个顺序容器 允许在任意位置进行 O(1) 插入和删除…

Blazor开发框架Known-V2.0.7

V2.0.7 Known是基于Blazor的企业级快速开发框架&#xff0c;低代码&#xff0c;跨平台&#xff0c;开箱即用&#xff0c;一处代码&#xff0c;多处运行。 官网&#xff1a;http://known.pumantech.comGitee&#xff1a; https://gitee.com/known/KnownGithub&#xff1a;http…

2024.8.7(SQL语句)

一、回顾 1、主服务器 [rootslave-mysql ~]# yum -y install rsync [rootmaster-mysql ~]# yum -y install rsync [rootmaster-mysql ~]# tar -xf mysql-8.0.33-linux-glibc2.12-x86_64.tar [rootmaster-mysql ~]# ls [rootmaster-mysql ~]# tar -xf mysql-8.0.33-linux-glib…

ssd202d-添加4g模块-HM609

1.lsusb要看到设备 2.驱动部分要打开usb识别,rndis支持 diff --git a/kernel/arch/arm/configs/infinity2m_spinand_ssc011a_s01a_minigui_defconfig b/kernel/arch/arm/configs/infinity2m_spinand_ssc011a_s01a_minigui_defconfig index e6a2e43b6..b0a60f4ee 100755 --- a/…

新品上市:ATA-401高压功率放大器技术参数、特点及应用

随着电子工程师不断增长的测试需求&#xff0c;安泰电子也在不断的拓展和研发新产品&#xff0c;近期安泰ATA-400系列高压功率放大器正式上线&#xff0c;又一单品新品测试仪器加入了Aigtek大家庭——ATA-401高压功率放大器。 关于ATA-401高压功率放大器 参数指标介绍&#xff…

基于vue框架的CIA报价平台的设计与实现1xv02(程序+源码+数据库+调试部署+开发环境)系统界面在最后面。

系统程序文件列表 项目功能&#xff1a;用户,供应商,产品分类,产品信息,在线咨询,资质申请 开题报告内容 基于Vue框架的CIA报价平台的设计与实现 开题报告 一、选题背景 随着市场竞争的日益激烈&#xff0c;企业对于成本控制与效率提升的需求愈发迫切。在采购与供应链管理…

Unity URP 浅析两种模型透明Shader原理

Unity URP 浅析两种模型透明Shader原理 前言实现第一种 单个Pass写入深度的逻辑正确半透明模型第二种 2个Pass分工合作视觉正确的半透明模型 参考 前言 使用Unity做过半透明的朋友们都知道&#xff0c;这里面一堆坑&#xff0c;下面简单说两种透明Shader在ASE中的实现&#xf…

【仓颉】控制台输出中文乱码,cmd和powershell的解决方案

【仓颉】控制台输出中文乱码&#xff0c;cmd和powershell的解决方案 main(): Int64 {...println("这是仓颉")return 0 }临时修改编码页面 代码页国家(地区)或语言437美国850多语言(拉丁文 I)936中国 - 简体中文(GB2312)52936简体中文(HZ)65000Unicode (UTF-7)65001U…

Qt 计算器程序

下载链接&#xff1a; https://pan.baidu.com/s/1112o9eVbpC7FySsXRuP2xA 提取码: rd92 运行结果&#xff1a;

聚鼎科技:开一家抖音店铺到底还有前景不

在数字化的浪潮中&#xff0c;抖音不仅仅是一款短视频应用&#xff0c;它已经成为了一个新兴的商业平台&#xff0c;一个充满无限可能的市场。在这个平台上开一家店铺&#xff0c;就像在星辰大海中寻找自己的航向&#xff0c;既有挑战也有机遇。 “未来属于那些相信梦想之美的人…

【银河麒麟服务器操作系统·实例分享】虚机系统ssh无法正常登录访问,分析过程及处理建议

了解更多银河麒麟操作系统全新产品&#xff0c;请点击访问 麒麟软件产品专区&#xff1a;https://product.kylinos.cn 开发者专区&#xff1a;https://developer.kylinos.cn 服务器环境以及配置 【机型】虚机 处理器&#xff1a; Kunpeng-920 内存&#xff1a; 32G 整机…

Linux 下的进程状态

文章目录 一、运行状态运行队列运行状态和运行队列 二、睡眠状态S状态D状态D状态产生的原因 三、暂停状态T状态t 状态 四、僵尸状态为什么有僵尸状态孤儿进程 一、运行状态 R状态&#xff1a;进程已经准备好随时被调度了。 运行队列 每个 CPU 都会维护一个自己的运行队列&am…

一文读懂GPU通信互联技术:GPUDirect、NVLink与RDMA

在高性能计算和深度学习领域&#xff0c;GPU的强大计算能力已成为不可或缺的工具。然而&#xff0c;随着模型复杂度和数据量的增加&#xff0c;单个GPU已无法满足需求&#xff0c;多个GPU甚至多台服务器协同工作成为常态。这就要求高效的GPU互联通信技术&#xff0c;以确保数据…

mesh格式转换:glb转ply——使用Blender烘焙贴图到顶点色

1. 导入glb文件 选择shading后&#xff0c;选中物体&#xff0c;就能看到下面的节点树。 2. 创建顶点颜色 这个时候我们可以看到模型的顶点颜色是纯白色的。 2. 将贴图付给材质 原来&#xff1a; 现在&#xff1a; 3. 切换渲染器并烘焙顶点颜色 第三行选择CPU渲染或者GPU…

Golang | Leetcode Golang题解之第331题验证二叉树的前序序列化

题目&#xff1a; 题解&#xff1a; func isValidSerialization(preorder string) bool {n : len(preorder)slots : 1for i : 0; i < n; {if slots 0 {return false}if preorder[i] , {i} else if preorder[i] # {slots--i} else {// 读一个数字for i < n &&…

Redis的持久化的策略

Redis的持久化的策略 官方文档说明 AOF持久化策略RDB持久化的策略 AOF持久化策略 AOF持久性记录服务器接收到的每个写操作&#xff0c;然后&#xff0c;可以在服务器启动时再次重播这些操作&#xff0c;重建原始数据集&#xff0c;使用与Redis协议本身相同的格式记录命令。…

kotlin协程之runBlocking

前言 上一篇: Callback转挂起函数 文章中,介绍了在Kotlin协程中如何把传统的回调风格的异步操作转换为协程风格的挂起函数,这个在开发过程中是非常常用的,主要用于把 callback 风格的代码转换为协程中的挂起函数,以便于我们在协程环境中调用。 但是,有时候我们也会遇到…