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)%pint 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.hqwc.cn/news/414027.html

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

相关文章

边缘计算AI智能分析网关V4客流统计算法的概述

客流量统计AI算法是一种基于人工智能技术的数据分析方法&#xff0c;通过机器学习、深度学习等算法&#xff0c;实现对客流量的实时监测和统计。该算法主要基于机器学习和计算机视觉技术&#xff0c;其基本流程包括图像采集、图像预处理、目标检测、目标跟踪和客流量统计等步骤…

Cinder组件作用

1、Cinder下发的流程 &#xff08;1&#xff09;Cinder-api接受上层发送的创建请求&#xff0c;然后把请求下发给Cinder-scheduler调度服务 &#xff08;2&#xff09;Cinder-scheduler调度服务&#xff0c;计算出哪个主机更适合创建&#xff0c;计算出来之后再把请求下发到Ci…

HarmonyOS 转场动画 ForEach控制

本文 我们继续说组件的专场特效 上文 HarmonyOS 转场动画 我们通过if控制了转场效果 本文 我们通过 ForEach 控制它的加载和删除 这时候就有人会好奇 ForEach 怎么控制删除呢&#xff1f; 很简单 循环次数不同 例如 第一次 10个 第二次 5个 那么后面的五个就相当于删除啦 我们…

C#winform上位机开发学习笔记2-串口助手的中文支持功能添加

分为两步&#xff1a; 1.串口接收支持中文显示 1.1.在软件初始化时写入此代码以支持汉字显示 //串口接收支持中文显示serialPort1.Encoding Encoding.GetEncoding("GB2312"); //串口1的解码支持GB2312汉字 2.串口发送支持中文输出 //支持中文输出Encoding Chine…

使用人工智能助手 Github Copilot 进行编程 01

本章涵盖了 AI 助⼿如何改变新程序员的学习⽅式为什么编程永远不会再⼀样了AI 助⼿如 Copilot 的⼯作原理Copilot 如何解决⼊⻔级编程问题AI 辅助编程的潜在危险 在本章中&#xff0c;我们将讨论人类如何与计算机进行交流。我们将向您介绍您的 AI 助手 GitHub Copilot&#x…

WordPress后台底部版权信息“感谢使用 WordPress 进行创作”和版本号怎么修改或删除?

不知道各位WordPress站长在后台操作时&#xff0c;是否有注意到每一个页面底部左侧都有一个“感谢使用 WordPress 进行创作。”&#xff0c;其中WordPress还是带有nofollow标签的链接&#xff1b;而页面底部右侧都有一个WordPress版本号&#xff0c;如下图中的“6.4.2 版本”。…

关于gltf模型格式文件的学习

目录 glTF模型 小黄鸭的gltf模型 字段分析 scene nodes meshes primitives attributes indices mode material accessors bufferView byteOffset count componentType type materials textures images samplers magFilter与minFilter wrapS与wrapT 进行…

Labview实现用户界面切换的几种方式---通过VI间相互调用

在做用户界面时我们的程序往往面对的对象是程序使用者&#xff0c;复杂程序如果放在同一个页面中&#xff0c;往往会导致程序冗长卡顿&#xff0c;此时通过多个VI之间的切换就可以实现多个界面之间的转换&#xff0c;也会显得程序更加的高大上。 本文所有程序均可下载&#xff…

WINCC读写EXCEL-VBS

原创 RENHQ WINCC 关于VBS操作EXCEL的文档不管在论坛上还是在网上&#xff0c;相关的脚本已经很多&#xff0c;但是依然有很多人在问这个问题&#xff0c;于是把我以前在论坛上发的一个集合帖子的脚本拿来&#xff0c;重新开个帖子&#xff0c;如果再有人问的话&#xff0c;可…

年龄性别预测1:年龄性别数据集说明(含下载地址)

年龄性别预测1&#xff1a;年龄性别数据集说明(含下载地址) 目录 年龄性别预测1&#xff1a;年龄性别数据集说明(含下载地址) 1.前言 2.MegaAge_Asian 3.MORPH 4.IMDB-WIKI 5.数据集下载 6.年龄性别预测和识别(Python/C/Android) 1.前言 本项目将实现年龄性别预测和识…

在线扒站网PHP源码-在线扒站工具网站源码

源码介绍 这是一款在线的网站模板下载程序&#xff0c;也就是我们常说的扒站工具&#xff0c;利用它我们可以很轻松的将别人的网站模板样式下载下来&#xff0c;这样就可以大大提高我们编写前端的速度了&#xff01;注&#xff1a;扒取的任何站点不得用于商业、违法用途&#…

VSCode 插件推荐

前言 关于开发用的插件就不做赘述了&#xff0c;网上面有很多文章都做了推荐&#xff0c;本文推荐几个好看的插件。 文件图标主题 Vscode icons Material Icon Theme 字体主题 推荐 One Dark Pro 其他 推荐一个生成好看代码的网址 https://carbon.now.sh/