lucas

题解 P3773 【[CTSC2017]吉夫特】

笑着哭i 提交于 2020-03-12 13:45:43
做这题的前置知识是 Lucas 定理,可以先做一下 这题 。 我就当大家都会 Lucas 定理了awa。 Lucas 定理: \[ C^m_n\!\equiv\!C^{\left\lfloor\frac{m}{p}\right\rfloor}_{\left\lfloor\frac{n}{p}\right\rfloor}\times C^{m\mod p}_{n\mod p}\pmod{p} \] 所以我们来看看原式: \[ \prod_{i=2}^k \dbinom{a_{b_i}}{a_{b_{i-1}}}\!\mod 2 \] 重点就在于 \(\!\mod 2\) 这个地方。 由 Lucas 定理可知,原式的答案不是 0,就是 1。 所以我们要保证 \(\forall \dbinom{a_{b_i}}{a_{b_{i-1}}} \equiv 1 \pmod 2\) 。 又因为 \(\dbinom{0}{0}\) , \(\dbinom{1}{0}\) , \(\dbinom{1}{1}\) 为 1, \(\dbinom{0}{1}\) 为 0。 根据 Lucas 定理,每次 \(\mod 2\) 相当于把 \(a_{b_i}\) 和 \(a_{b_{i-1}}\) 二进制拆分,并且保证, \(a_{b_i}\) 为 0 的那个位上 \(a_{b_{i-1}}\) 不能为 1。

[bzoj4176] Lucas的数论

倾然丶 夕夏残阳落幕 提交于 2020-03-01 07:38:04
Description 去年的Lucas非常喜欢数论题,但是一年以后的Lucas却不那么喜欢了。 在整理以前的试题时,发现了这样一道题目“求Sigma(f(i)),其中1<=i<=N”,其中 表示i的约数个数。他现在长大了,题目也变难了。 求如下表达式的值: \[ \sum_{i=1}^n\sum_{j=1}^nf(ij) \] 其中 表示ij的约数个数。 他发现答案有点大,只需要输出模1000000007的值。 Input 第一行一个整数n。 Output 一行一个整数ans,表示答案模1000000007的值。 Sample Input 2 Sample Output 8 HINT 对于100%的数据n <= 10^9。 solution 这题要求的东西其实和[ bzoj3994] [SDOI2015]约数个数和 是一样的,只是数据范围不同. 由于这题 \(n\) 到了 \(1e9\) ,考虑使用杜教筛. 对于 \(f(n)=\sum_{i=1}^{n}\lfloor\frac{n}{i}\rfloor\) ,可以数论分块大力算一下. 然后考虑 \(\sum_{i=1}^{n}\mu(i)\) 怎么算. 先把杜教筛的套路式搬出来: \[ S(n)=\sum_{i=1}^{n}(f*g)(i)-\sum_{i=2}^{n}g(i)S(\lfloor\frac{n}{i}

Lucas 定理

允我心安 提交于 2020-01-27 03:51:34
Lucas定理 内容 \[ C^{n}_{m}\equiv C^{\lfloor \frac{n}{p}\rfloor}_{\lfloor \frac{m}{p}\rfloor} \times C^{n\%p}_{m\%p}\quad(mod\;p) \] 条件是 \(p\) 为质数。 \(Lucas\) 定理的主要作用是当组合数过大,无法处理其中 \(n\) 和 \(m\) 的阶乘。通过展开将其表示成累积形式。 复杂度为 \(O(log^n)\) 。 注意,由于实际上是将问题转移到 \(p\) 身上,所以 \(Lucas\) 的局限是 \(p\) 不能太大。 证明 首先提出一个引理: \(p\mid C^{i}_{p}\quad(p=1,2,3,\cdots,p-1)\) 证明如下: \[ \bf 原式等于:\scr \frac{\overbrace{p(p-1)\cdots (p-i+1)}^{i}}{i!} \] 易知一个数 \(x\) 在长度为 \(x\) 的连续自然数中必有一个整倍数。 那么可以知道下面的 \(i\) 一定对应上面的某数。 但是可以知道,小于 \(p\) 的数中只有 \(1\) 可以整除它,那么我们就可以知道 \(1\) 对应 \(p\) ,在除完后 \(p\) 这个因子被保留了下来,当然可以被 \(p\) 整除。 下面正式开始证明。 利用了二项式展开

卢卡斯(Lucas)定理

蓝咒 提交于 2020-01-26 19:16:50
问题 洛谷 题目地址 给你正整数 \(n,m,p\) ,其中 \(p\) 是质数。求 \(\dbinom{n}{m} \% p\) ( \(\dbinom{n}{m}\) 是组合数,表示 \(n\) 选出 \(m\) )。 Lucas定理结论 若 \(p\) 是质数,则对于任意整数 \(1 \le m \le n\) ,有: \[\dbinom{n}{m} \equiv \dbinom{n\%p}{m\%p} * \dbinom{n/p}{m/p} \pmod{p}\] 另一种形式: 设 \(n=\sum_{i=0}^k n_i*p^i,m=\sum_{i=0}^k m_i*p^i\) (相当于把 \(n,m\) 写成 \(p\) 进制数),那么有: \[\dbinom{n}{m} \equiv \prod_{i=0}^k \dbinom{n_i}{m_i} \pmod{p}\] 很显然两种形式意义相同,我们直接证明后面这个式子。 证明 前置知识:多项式同余 前置知识:二项式定理 推导: \[\because (1+x)^p = \sum_{i=0}^p \dbinom{p}{i} 1^{p-i}*x^i = \sum_{i=0}^p \dbinom{p}{i} x^i\] \[\therefore (1+x)^p \equiv \sum_{i=0}^p \dbinom{p}{i}

Spring REST Template

夙愿已清 提交于 2019-12-17 03:00:04
简介 我们之前都使用过HttpClient来发送HTTP请求,但我们很多时间都需要将HttpClient请求或者响应的数据转换为Java对象,HttpClient需要我们自己手动来解析。我们今天要介绍的Spring REST Template比HttpClient用起来更加方便简洁。 思路: 一、后台主要提供RESTFUL Service服务 二、门户,也就是前端系统,用来处理浏览器提交的请求,接收到用户请求会使用Spring REST Template来提交RESTFUL Service请求 基于Maven构建,使用Spring Boot 2.x开发 项目开发 management+portal managerment项目架构: porm: < ? xml version = "1.0" encoding = "UTF-8" ? > < project xmlns = "http://maven.apache.org/POM/4.0.0" xmlns : xsi = "http://www.w3.org/2001/XMLSchema-instance" xsi : schemaLocation = "http://maven.apache.org/POM/4.0.0 https://maven.apache.org/xsd/maven-4.0.0.xsd" > <

【数论-Lucas定理】

旧城冷巷雨未停 提交于 2019-12-07 12:41:56
1.写在前面:我始终觉得,对于一个问题要知其然,更要知其所以然。Lucas定理在刚刚接触数论的时候就知道了,因为这是一个很常用的定理,常常和中国剩余定理放在一起考。最近在组合数学上出现了很多问题,但是都是找个结论就过去了。浑浑噩噩并不懂其中原理,感觉自己的数学直觉一直在下降,以前我甚至能够从数据中看出来数学表达式,后来学了很多的工具,就变懒了,甚至连一个稍微复杂一点的积分都懒得动手,直接自适应Simpson积过去。今天又拿起了笔,准备把Lucas定理自己证明一遍。证完之后,我似乎又看到之前的那个影子:不畏惧任何数学表达式,即使推导了十几页也毫不畏惧。废话到此结束,正题开始。 2.Lucass定理: Lucas定理是同余理论中的一个很重要的定理,用于组合数取模。常常使用在问题的结果需要对某个数据取模,n,m很大,达到1e15以上,但是p在1e9以内。一般来说最好的效果实在1e5以内。看到这个式子,一个十分典型的递归,并且注意到p是素数。所以我们就会有很多疑问:这个定理怎么来的?p为什么一定要是素数?p不是素数可以吗?我们来解决这些问题。 3.在解决这个问题之前,我想说一个问题:记得是ZOJ的某次月赛吧,问题就是求: . 其实说白了,就是统计杨辉三角形每一行中有多少个奇数。这个问题当时我打了个表,看出了规律。结论和i和n的二进制有关,但是为什么呢? 4.首先证明Lucas定理。

luoguP2480 [SDOI2010]古代猪文

半城伤御伤魂 提交于 2019-12-05 16:28:57
题意 考虑所求即为: \(G^{\sum\limits_{d|n}C_n^d}\%999911659\) 。 发现系数很大,先用欧拉定理化简系数: \(G^{\sum\limits_{d|n}C_n^d\%999911658}\%999911659\) 。 实际上我们只用求 \(\sum\limits_{d|n}C_n^d\%999911658\) ,之后快速幂即可。 发现 \(999911658\) 不是个质数,没办法用Lucas定理求组合数,于是考虑拆开 \(999911658\) ,发现为 \(2,3,4679,35617\) 。 于是对模意义下这四个数分别求 \(\sum\limits_{d|n}C_n^d\) ,假设第 \(i\) 个求出的为 \(a_i\) 发现我们得到了四个形如 \(x\equiv a_i\pmod{p_i}\) 的方程,用中国剩余定理合并即可得到答案(这其实就是exLucas的简化版)。 code: #include<bits/stdc++.h> using namespace std; typedef long long ll; const ll mod1=999911659; const ll mod2=999911658; const int maxs=40010; ll n,m; ll a[5],prime[]={0,2,3,4679

数学整理

99封情书 提交于 2019-12-05 08:25:55
1 .各种数:    全排列 :P(n,n)=n! 部分排列 :P(n,m)=n!/(n-m)!    组合数 :公式:C(n,m)=n!/(m!*(n-m)!) 递推式 :C(n,m)=C(n-1,m)+C(n-1,m-1)       性质:C(n,m)=C(n,n-m)       Lucas定理:C(n,m)%p=C(n/p,m/p)*C(n%p,m%p)%p        #define long long LL //farc[i]表示i! LL C(LL n,LL m,LL p){ if(n<m)return 0; return farc[n]*fpow(farc[m],p-2,p)%p*fpow(farc[n-m],p-2,p)%p; } LL Lucas(LL n,LL m,LL p){ if(n<m)return 0; if(!n)return 1; return Lucas(n/p,m/p,p)*C(n%p,m%p,p)%p; } Lucas        应用 : 二项式定理:        来源: https://www.cnblogs.com/passione-123456/p/11915235.html

闭包的理解

爷,独闯天下 提交于 2019-12-04 03:42:56
闭包是Javascript语言特有的"链式作用域"结构(chain scope)变量的作用域有三种:全局作用域和局部作用域以及块作用域(ES6)。,子对象会一级一级地向上寻找所有父对象的变量。所以,父对象的所有变量,对子对象都是可见的,反之则不成立。 闭包:JavaScript高级程序设计里写闭包是有权访问另一个函数作用域中的变量的函数,使作用域得到了延长。我们有时候在函数外部需要得到函数内的局部变量。而闭包就是将函数内部和函数外部连接起来的一座桥梁。 闭包的优点: 是闭包封住了变量作用域,有效地防止了全局污染 可以读取其他函数内部的变量,让这些变量的值始终保持在内存中,不会随着函数的结束而自动销毁。 可以很巧妙地实现静态私有变量、私有函数方法等 闭包的缺点: 由于闭包会使得函数中的变量都被保存在内存中,所以存在内存泄漏的风险 在浏览器端可以通过强制刷新解决,对用户体验影响不大 在服务端,由于 node 的内存限制和累积效应,可能会造成进程退出甚至服务器沓机 使用场景 :函数内部变量只初始化一次 解决方法是显式对外暴露一个接口,专门用以清理变量: /*1.清除失败,因为每次先执行mockData()后才会执行闭包,所以每次都会在局部作用域创建常量mem*/ function mockData() { const mem = {name:"lucas",age:22}; return

组合数/Lucas定理

删除回忆录丶 提交于 2019-12-03 21:26:27
组合数公式: 通项: $C(n,m) = n!/(m!*(n-m)!)$ 递推: $C(n,m) = C(n-1,m-1)+C(n-1,m)$ Lucas定理: 适用于p是质数,且p较小的情况 $Lucas(n,m) = Lucas(n/p,m/p) * C(n$ $mod$ $p,m$ $mod$ $p)$ $(mod$ $p)$ $Lucas(n,0) = 1$ 代码如下 板子题 const int maxn = 1e5+10; int t,n,m,p; long long f[maxn]; void get_fac() { f[0] = 1; for(int i = 1; i <= p; i++) f[i] = (f[i-1]*i) % p; } int qpow(int a,int b){ long long ans = 1,base = a; while(b){ if(b&1) ans = (ans*base) % p; base = (base*base) % p; b >>= 1; } return ans; } int inv(int x){ return qpow(x,p-2); } int C(int n,int m){ if(m > n) return 0; return f[n] * inv(f[m])%p * inv(f[n-m])%p; } int