Lucas求大组合数C(n,m)%p

将大组合数C(n,m)%p分解为小组合数C(n,m)%p乘积的模,n<=10^18,m<=10^18。

其中求解小组合数可以根据定义式计算(质因子分解),也可以通过定义式的变形计算(逆元)

一、定义式计算(质因子分解-快速幂)

快速幂计算每一组pi^ci%p,然后相乘取模

#include<stdio.h>
//素数表(筛法)
const int maxn=1000000;
int prime[maxn];
int pNum=0;
bool p[maxn]={false};
void Find_Prime(){
	for(int i=2;i<maxn;i++){
		if(p[i]==false){
			prime[pNum++]=i;
			for(int j=i+i;j<maxn;j+=i){
				p[j]=true;
			}
		}
	} 
}

//n!中含质因子p个数
int cal(int n,int p){
	int ans=0;
	while(n){
		ans+=n/p;
		n/=p;
	}
	return ans;
}

//快速幂求a^b%p 
typedef long long LL; 
LL binaryPow(LL a,LL b,LL m){
	if(b==0) return 1;
	if(b&1) return a*binaryPow(a,b-1,m)%m;
	else{
		LL mul=binaryPow(a,b/2,m);
		return mul*mul%m;
	}
}

//小组合数C(n,m)%p 
//遍历素数表中每一个质因子,计算每一组pi^ci%p,然后相乘取模
int C(int n,int m,int p){
	int ans=1;
	for(int i=0;prime[i]<=n;i++){
		int c=cal(n,prime[i])-cal(m,prime[i])-cal(n-m,prime[i]); //C(n,m)中含质因子个数 
		ans=ans*binaryPow(prime[i],c,p)%p;
	}
	return ans;
} 
 
//Lucas定理求大组合数C(n,m)%p
int  Lucas(int n,int m,int p){
	if(m==0) return 1;
	return C(n%p,m%p,p)*Lucas(n/p,m/p,p)%p;
} 

int main(){
	Find_Prime();
	int n,m,p;
	scanf("%d%d%d",&n,&m,&p);
	printf("%d",Lucas(n,m,p));
	return 0;
}

二、定义式的变形计算(逆元)

#include<stdio.h>
//扩展欧几里得(解出x) 
int exGcd(int a,int m,int &x,int &y){
	if(m==0){
		x=1;
		y=0;
		return a;
	}
	int g=exGcd(m,a%m,x,y);
	int temp=x;
	x=y;
	y=temp-(a/m)*y;
	return g;
}

//逆元(得0-m范围内的解)
int inverse(int a,int m){
	int x,y;
	int g=exGcd(a,m,x,y);
	return (x%m+m)%m;
}

//求小组合数C(n,m)%p 
int C(int n,int m,int p){
	int ans=1;
	for(int i=1;i<=m;i++){
		ans=ans*(n-m+i)%p;
		ans=ans*inverse(i,p)%p;
	}
	return ans; 
}

//Lucas求大组合数 C(n,m)%p
 int Lucas(int n,int m,int p){
 	if(m==0) return 1;
 	return C(n%p,m%p,p)*Lucas(n/p,m/p,p)%p;
 }
 
 int main(){
 	int n,m,p;
 	scanf("%d%d%d",&n,&m,&p);
 	printf("%d",Lucas(n,m,p));
 	return 0;
 }

运行结果:

C(84,58)%5=2

 

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

如若内容造成侵权/违法违规/事实不符,请联系我们进行投诉反馈qq邮箱809451989@qq.com,一经查实,立即删除!

相关文章

如何使用Portainer部署web站点并实现无公网ip远程访问

文章目录 前言1. 安装Portainer1.1 访问Portainer Web界面 2. 使用Portainer创建Nginx容器3. 将Web静态站点实现公网访问4. 配置Web站点公网访问地址4.1公网访问Web站点 5. 固定Web静态站点公网地址6. 固定公网地址访问Web静态站点 前言 Portainer是一个开源的Docker轻量级可视…

【根据loss曲线看模型微调效果】如何使用loss曲线诊断机器学习模型性能

一、Loss曲线 在模型的预训练或者微调过程中&#xff0c;我们一般通过观察loss曲线来得出模型对于数据集的学习效果等信息。那么我们如何根据loss曲线得到一些信息呢&#xff1f; 通常数据集会被划分成三部分&#xff0c;训练集&#xff08;training dataset&#xff09;、验证…

Flask 项目怎么配置并创建第一个小项目?附上完成第一个小案例截图

目录 1. 为什么要学习 flask&#xff1f; 2. flask 是什么&#xff1f; 3. flask 如何使用&#xff1f; 要安装 Flask&#xff0c;可以按照以下步骤进行&#xff1a; 4. 使用流程 4.1. 新建项目 4.1.1. 打开 pycharm&#xff0c;新建项目 4.1.2. 设置目录&#xff0c;并…

解决系统开发中的跨域问题:CORS、JSONP、Nginx

文章目录 一、概述1.问题场景2.浏览器的同源策略3.解决思路 二、一点准备工作1.创建前端工程12.创建后端工程3.创建前端工程24.跨域问题 三、方法1&#xff1a;使用CORS四、方法2&#xff1a;JSONP五、方法3&#xff1a;Nginx1.安装和启动&#xff08;windows&#xff09;2.使用…

匿名/箭头函数,立即执行函数IIFE;函数声明式和函数表达式

目录 匿名/箭头函数&#xff1a;简洁 继承上一层作用域链的this 不绑定arguments,用rest参数 rest 参数&#xff1a;...真正的数组 因为没有function声明&#xff0c;所以没有原型prototype&#xff0c;所以不能作为构造函数 当函数体只有一句时&#xff0c;可省 return ,…

【状态压缩】【动态规划】【C++算法】691贴纸拼词

作者推荐 【动态规划】【数学】【C算法】18赛车 本文涉及知识点 状态压缩 动态规划 LeetCode:691 贴纸拼词 我们有 n 种不同的贴纸。每个贴纸上都有一个小写的英文单词。 您想要拼写出给定的字符串 target &#xff0c;方法是从收集的贴纸中切割单个字母并重新排列它们。如…

肇庆韶关异形件上门扫描服务龙岗3D抄数画图福田电脑抄数STL转STP

在当今的数字化时代&#xff0c;对于需要精确测量和设计的客户来说&#xff0c;CASAIM中科广电异形件上门扫描及抄数设计是一项非常重要的服务。这项服务不仅可以为客户提供高质量的测量和设计&#xff0c;还可以帮助他们减少时间和成本。 异形件是一种特殊的零件&#xff0c;…

力扣 | 11. 盛最多水的容器

双指针解法–对撞指针 暴力解法public int maxArea1(int[] height) {int n height.length;int ans 0;for (int i 0; i < n; i) {for (int j i 1; j < n; j) {int area Math.min(height[i], height[j]) * (j - i);ans Math.max(ans, area);}}return ans;}双指针解法…

java毕业设计 | springboot二手交易平台 闲置物品商城(附源码)

1&#xff0c;项目背景 1.1 当前的问题和困惑 随着社会发展&#xff0c;网上购物已经成为我们日常生活的一部分。但是&#xff0c;至今为止大部分电商平台都是从人们日常生活出发&#xff0c;出售都是一些日常用品比如&#xff1a;食物、服装等等&#xff0c;并未发现一个专注…

计算机网络-ACL实验

一、NAT实验配置 NAT实验配置 通过基本ACL匹配VLAN 10网段&#xff0c;然后在出口设备NAT转换只要匹配到VLAN10地址则进行转换。 核心交换机 # 配置VLAN和默认路由&#xff0c;配置Trunk和Access接口 interface Vlanif10ip address 192.168.10.254 255.255.255.0 # interface V…

源聚达科技:个人怎么开抖音店铺

随着互联网的发展&#xff0c;电商平台已经成为了人们购物的主要渠道之一。而抖音作为目前最受欢迎的短视频平台之一&#xff0c;也逐渐成为了一个新兴的电商市场。那么&#xff0c;个人怎么开抖音店铺呢?下面就来详细介绍一下。 第一步&#xff1a;注册抖音账号 首先&#xf…

深度学习进行数据增强(实战篇)

本文章是我在进行深度学习时做的数据增强,接着我们上期的划分测试集和训练集来做. 文章目录 前言 数据增强有什么好处&#xff1f; 一、构造数据增强函数 二、数据增强 总结 前言 很多人在深度学习的时候在对数据的处理时一般采用先数据增强在进行对训练集和测试集的划分,…

ORM Bee设计思想与功能思维导图

ORM Bee设计思想与功能思维导图 Bee&#xff0c;互联网新时代的Java ORM框架&#xff0c;支持Sharding&#xff1b;JDBC&#xff0c;Android&#xff0c;HarmonyOS&#xff1b;支持多种关系型数据库&#xff0c;还支持NoSQL的Cassandra&#xff0c;Mongodb等&#xff1b;更快、…

NVIDIA 大模型 RAG 分享笔记

文章目录 大语言模型在垂直领域落地的三个挑战&#xff1a;什么是 RAG以及为什么能解决大预言模型所带来的的这三个问题RAG 不是一项技术而是整体的 Pipeline非参数化 &#xff1a;数据库部分加载到数据库中检索阶段 提升检索效率的技术检索前&#xff1a;对query做处理use que…

redis缓存和本地缓存的应用设计

数据查询顺序 一级缓存&#xff1a;本地缓存 -》二级缓存&#xff1a;redis缓存 -》数据库 本地缓存和分布式缓存 本地缓存&#xff1a;基于jvm, 意思是程序放在哪&#xff0c;数据就存储在哪&#xff0c;不需要网络请求&#xff0c;特别快&#xff0c;但是需要占用jvm的内存…

Redis--Zset使用场景举例(滑动窗口实现限流)

文章目录 前言什么是滑动窗口zset实现滑动窗口小结附录 前言 在Redis–Zset的语法和使用场景举例&#xff08;朋友圈点赞&#xff0c;排行榜&#xff09;一文中&#xff0c;提及了redis数据结构zset的指令语法和一些使用场景&#xff0c;今天我们使用zset来实现滑动窗口限流&a…

Docker 仓库管理

Docker 仓库管理 仓库&#xff08;Repository&#xff09;是集中存放镜像的地方。以下介绍一下 Docker Hub。当然不止 docker hub&#xff0c;只是远程的服务商不一样&#xff0c;操作都是一样的。 Docker Hub 目前 Docker 官方维护了一个公共仓库 Docker Hub。 大部分需求…

Oracle命令大全

文章目录 1. SQL*Plus命令&#xff08;用于连接与管理Oracle数据库&#xff09;2. SQL数据定义语言&#xff08;DDL&#xff09;命令3. SQL数据操作语言&#xff08;DML&#xff09;命令4. PL/SQL程序块5. 系统用户管理6. 数据备份与恢复相关命令1. SQL*Plus命令&#xff08;用…

java-log4j日志冲突解决

一、概述 java日志框架较多&#xff0c;其中主流的slf4j和commons-logging是日志接口&#xff0c;log4j、log4j2和logback是真正的日志实现库。 二、具体库单独使用 2.1 log4j <dependency><groupId>log4j</groupId><artifactId>log4j</artifa…

CentOS stream 9配置网卡

CentOS stream9的网卡和centos 7的配置路径&#xff1a;/etc/sysconfig/network-scripts/ifcfg-ens32不一样。 CentOS stream 9的网卡路径&#xff1a; /etc/NetworkManager/system-connections/ens32.nmconnection 方法一&#xff1a; [connection] idens32 uuid426b60a4-4…
最新文章