扩展卢卡斯定理
时间:2019-11-10
本文章向大家介绍扩展卢卡斯定理,主要包括扩展卢卡斯定理使用实例、应用技巧、基本知识点总结和需要注意事项,具有一定的参考价值,需要的朋友可以参考一下。
先来一篇大佬的博客 Fading 的博客
然后如果你能认真研读上面大佬的博客的话,应该就比较轻松了,我比较蒟蒻,还是不要多说的好=w=
Code:
1 #include <bits/stdc++.h> 2 #define ll long long 3 using namespace std; 4 const int N = 1007; 5 ll n, m, p; 6 ll a[N], b[N]; 7 void exgcd(ll a, ll b, ll &x, ll &y) {//用于求逆元 8 if (b == 0) { 9 x = 1; 10 y = 0; 11 return; 12 } 13 exgcd(b, a % b, x, y); 14 ll t = x; 15 x = y; 16 y = t - a / b * y; 17 } 18 ll inv(ll a, ll p) {//求a在p意义下的逆元 19 ll x, y; 20 exgcd(a, p, x, y); 21 return (x + p) % p;//保证其为非负 22 } 23 ll mul(ll a, ll b, ll p) {//龟速乘防爆 24 ll re = 0; 25 a %= p; 26 b %= p; 27 for (; b; b >>= 1) { 28 if (b & 1) { 29 re = (re + a) % p; 30 } 31 a = (a + a) % p; 32 } 33 return re; 34 } 35 ll pw(ll x, ll y, ll p) {//快速幂 36 ll re = 1; 37 x %= p; 38 for (; y; y >>= 1) { 39 if (y & 1) { 40 re = re * x % p; 41 } 42 x = x * x % p; 43 } 44 return re; 45 } 46 ll fac(ll n, ll p, ll pk) {//求n! % p**k 47 if (n == 0) { 48 return 1; 49 } 50 ll rou = 1;//求循环节 51 ll rem = 1;//求余项 52 for (ll i = 2; i <= pk; i++) { 53 if (i % p) { 54 rou = rou * i % pk; 55 } 56 } 57 rou = pw(rou, n / pk, pk); 58 for (ll i = pk * (n / pk); i <= n; i++) { 59 if (i % p) { 60 rem = rem * (i % pk) % pk; 61 } 62 } 63 return fac(n / p, p, pk) * rou % pk * rem % pk; 64 } 65 ll G(ll n, ll p) {//算一个次幂 66 if (n < p) { 67 return 0; 68 } 69 return G(n / p, p) + (n / p); 70 } 71 ll C_pk(ll n, ll m, ll p, ll pk) {//求组合数C(n,m) % p**k 72 ll f = fac(n, p, pk); 73 ll inv1 = inv(fac(m, p, pk), pk); 74 ll inv2 = inv(fac(n - m, p, pk), pk); 75 ll mi = pw(p, G(n, p) - G(m, p) - G(n - m, p), pk); 76 return f * inv1 % pk * inv2 % pk * mi % pk; 77 } 78 ll exlucas(ll n, ll m, ll p) {//拓展卢卡斯定理 79 ll re = p, tot = 0; 80 for (ll i = 2; i * i <= p; i++) { 81 if (re % i == 0) { 82 ll pk = 1; 83 while (re % i == 0) { 84 pk *= i; 85 re /= i; 86 } 87 a[++tot] = C_pk(n, m, i, pk);//先将p分解,然后分别记下方程组 88 b[tot] = pk; 89 } 90 } 91 if (re != 1) { 92 a[++tot] = C_pk(n, m, re, re); 93 b[tot] = re; 94 } 95 ll ans = 0; 96 for (ll i = 1; i <= tot; i++) {//再用中国剩余定理合并求出答案 97 ll t = p / b[i]; 98 ll inv1 = inv(t, b[i]); 99 ans = (ans + a[i] * t % p * inv1 % p) % p; 100 } 101 return ans; 102 } 103 int main () { 104 scanf("%lld%lld%lld", &n, &m, &p); 105 printf("%lld\n", exlucas(n, m, p)); 106 return 0; 107 }
原文地址:https://www.cnblogs.com/Sundial/p/11830563.html
- iOS多线程——你要知道的RunLoop都在这里你要知道的iOS多线程NSThread、GCD、NSOperation、RunLoop都在这里
- iOS网络——AFNetworking AFHttpSessionManager源码解析
- iOS网络——SDWebImage SDImageDownloader源码解析你要知道的NSURLSession都在这里
- iOS缓存 NSCache详解及SDWebImage缓存策略源码分析你要知道的NSCache都在这里
- freeRTOS信号量学习
- 微信扫码支付+Asp.Net MVC
- Linq中连接主要有组连接、内连接、左外连接、交叉连接四种
- 深入源码理解YYCache 、SDWebImage、AFNetworking、NSCache 缓存方式与对比
- Linq Like的操作
- iOS网络——AFNetworking AFURLSessionManager源码解析
- 1692: [Usaco2007 Dec]队列变换(BZOJ1640强化版)
- 1620: [Usaco2008 Nov]Time Management 时间管理
- 手把手教你树莓派linux内核如何编译
- js处理异常try{}catch(e){}
- JavaScript 教程
- JavaScript 编辑工具
- JavaScript 与HTML
- JavaScript 与Java
- JavaScript 数据结构
- JavaScript 基本数据类型
- JavaScript 特殊数据类型
- JavaScript 运算符
- JavaScript typeof 运算符
- JavaScript 表达式
- JavaScript 类型转换
- JavaScript 基本语法
- JavaScript 注释
- Javascript 基本处理流程
- Javascript 选择结构
- Javascript if 语句
- Javascript if 语句的嵌套
- Javascript switch 语句
- Javascript 循环结构
- Javascript 循环结构实例
- Javascript 跳转语句
- Javascript 控制语句总结
- Javascript 函数介绍
- Javascript 函数的定义
- Javascript 函数调用
- Javascript 几种特殊的函数
- JavaScript 内置函数简介
- Javascript eval() 函数
- Javascript isFinite() 函数
- Javascript isNaN() 函数
- parseInt() 与 parseFloat()
- escape() 与 unescape()
- Javascript 字符串介绍
- Javascript length属性
- javascript 字符串函数
- Javascript 日期对象简介
- Javascript 日期对象用途
- Date 对象属性和方法
- Javascript 数组是什么
- Javascript 创建数组
- Javascript 数组赋值与取值
- Javascript 数组属性和方法
- 《机器学习》-- 第七章 朴素贝叶斯
- 【DIY数字仪表】RT-Thread移植touchgfx使用sd卡升级固件和图片资源(4)
- Transformers中的Beam Search高效实现
- 多边形裁剪图片升级啦!Cocos Creator !
- 使用curl进行服务器测试
- 打卡群刷题总结0805——不同的二叉搜索树
- 利用STS临时密钥服务快速搭建直传页面的实践
- Clickhouse在大数据分析平台-留存分析上的应用
- Rancher 高可用部署
- 为什么Web端登录需要验证码?
- 原创分享 TiDB 的列式存储引擎是如何实现的?
- Qt音视频开发5-vlc事件订阅
- matlab中使用VMD(变分模态分解)
- TKE中挂载文件到CFS子目录
- Nginx Ingress on TKE 部署最佳实践