lucas

MongoDB安装调试

倖福魔咒の 提交于 2019-12-03 16:40:11
1:安装 去mongodb的官网http://www.mongodb.org/downloads下载32bit的包 解压后会出现以下文件 在安装的盘C:下建立mongodb文件夹,拷贝bin文件夹到该目录下,这样就相当于安装了mongodb的相关命令。 为了启动mongodb方便,将mongod.exe路径加入环境变量,电脑->属性->高级系统设置->环境变量,在path里加入路径: 这样在命令行任何地方都能用到mongod命令。 2:建立数据文件及启动 然后在D盘新建一个mongodb文件夹用来放数据文件并在mongodb文件夹下建立data,log文件夹,在log文件夹下建立mongodb.log文件 启动mongodb服务:打开命令行输入命令 >mongod --dbpath "d://mongodb//data" --logpath "d://mongodb//log//mongodb.log" --logappend 出现以下情况表示在27017端口启动成功。 解析:mongod --dbpath 命令是创建数据库文件的存放位置,启动mongodb服务时需要先确定数据库文件存放的位置,否则系统不会自动创建,启动会不成功。     --logpath 表示日志文件存放的路径 --logappend 表示以追加的方式写日志文件 在浏览器上会看到该信息: 默认27017端口

Lucas probable prime test

匿名 (未验证) 提交于 2019-12-03 01:34:02
可以将文章内容翻译成中文,广告屏蔽插件可能会导致该功能失效(如失效,请关闭广告屏蔽插件后再试): 问题: I have been trying to implement the Baillie-PSW primality test for a few days, and have ran into some problems. Sepcifically when trying to use the Lucas probable prime test . My question is not about Baile, but on how to generate the correct Lucas sequence modulo some number For the first two psudoprimes my code gives the correct result, eg for 323 and 377 . However for the next psudoprime, both the standard implementation and the doubling version fails. Trying to do modulo operations on V_1 completely breaks the doubling version of the

Lucas定理和拓展Lucas定理

三世轮回 提交于 2019-12-02 22:11:49
Lucas定理用于求C(n,m)%p,(p为质数),而拓展Lucas定理中,p不一定为质数。 Lucas定理有两种形式,在线算法和离线打表,在线算法适用于p经常改变 或 查询次数较少 的情况,其他情况下用离线打表。 首先是一个在线算法。 1 ll pow(ll a, ll b, ll m) 2 { 3 ll ans = 1; 4 a %= m; 5 while(b) 6 { 7 if(b & 1)ans = (ans % m) * (a % m) % m; 8 b /= 2; 9 a = (a % m) * (a % m) % m; 10 } 11 ans %= m; 12 return ans; 13 } 14 ll inv(ll x, ll p)//x关于p的逆元,p为素数 15 { 16 return pow(x, p - 2, p); 17 } 18 ll C(ll n, ll m, ll p)//组合数C(n, m) % p 19 { 20 if(m > n)return 0; 21 ll up = 1, down = 1;//分子分母; 22 for(int i = n - m + 1; i <= n; i++)up = up * i % p; 23 for(int i = 1; i <= m; i++)down = down * i % p; 24 return up

cogs2823求组合数(lucas定理

大憨熊 提交于 2019-11-27 19:29:47
http://cogs.pro:8080/cogs/problem/problem.php?pid=vNQJJVUVj 再写个数学水题,其实lucas适用于m,n比较大而p比较小的情况。 题意:给出两个数n,m,求出C(n,m) mod 1000000007的值 (n <= 2 *1e5) 思路:先预处理出组合数,其中逆元用快速幂求,因为如果p是质数,a^p = a (mod p),a的逆元就是a^(p-2)。然后直接lucas就完了。 1 #include<bits/stdc++.h> 2 #define fo(x) freopen(x".in","r",stdin); freopen(x".out","w",stdout); 3 using namespace std; 4 typedef long long ll; 5 6 ll pow_mod(ll a,ll x,ll p){ 7 ll ret = 1; 8 while(x){ 9 if(x&1) ret = ret*a%p; 10 a = a*a%p; 11 x >>= 1; 12 } 13 return ret; 14 } 15 16 ll C(ll n,ll m, ll p){ 17 if(m==0) return 1; 18 if(m>n-m) m = n-m; 19 ll up = 1,down = 1; 20

「SDOI2010」古代猪文 Lucas+中国剩余定理

China☆狼群 提交于 2019-11-27 09:22:34
题意: 猪王国的文明源远流长,博大精深。 iPig在大肥猪学校图书馆中查阅资料,得知远古时期猪文文字总个数为N。当然,一种语言如果字数很多,字典也相应会很大。当时的猪王国国王考虑到如果修一本字典,规模有可能远远超过康熙字典,花费的猪力、物力将难以估量。故考虑再三没有进行这一项劳猪伤财之举。当然,猪王国的文字后来随着历史变迁逐渐进行了简化,去掉了一些不常用的字。 iPig打算研究古时某个朝代的猪文文字。根据相关文献记载,那个朝代流传的猪文文字恰好为远古时期的k分之一,其中k是N的一个正约数(可以是1和N)。不过具体是哪k分之一,以及k是多少,由于历史过于久远,已经无从考证了。 iPig觉得只要符合文献,每一种能整除N的k都是有可能的。他打算考虑到所有可能的k。显然当k等于某个定值时,该朝的猪文文字个数为 \(\frac{N}{k}\) 。然而从N个文字中保留下 \(\frac{N}{k}\) 个的情况也是相当多的。iPig预计,如果所有可能的k的所有情况数加起来为P的话,那么他研究古代文字的代价将会是G的P次方。 现在他想知道猪王国研究古代文字的代价是多少。由于iPig觉得这个数字可能是天文数字,所以你只需要告诉他答案除以999911659的余数就可以了。 输入: 输入文件ancient.in有且仅有一行:两个数N,G,用一个空格分开。 输出: 输出文件ancient

Lucas定理模板

[亡魂溺海] 提交于 2019-11-27 05:38:48
一本通上不是很懂,所以自己查资料做了个总结。 Lucas定理: 若p是质数 ,则对于任意整数1<=m<=n,有:   c(n,m)%p=c(n%p,m%p)*c(n/p,m/p)%p 也就是把n和m表示成p进制数,对p进制下的每一位分别计算组合数,最后再乘起来。 最后一句话可能难以理解,实际上联想到平常求一个十进制数的二进制数,也是对十进制数进行不断取模,由除以二的余数得到二进制数,所以对于Lucas定理也差不多是一个道理。 由于计算过程中不断地取模,同时事实上c(n/p,m/p)仍可以拆分,所以主要用于组合数中n,m较大时的问题中。 模板题 【问题描述】   给出组合数c(n,m),表示从n个元素中选出m个元素的方案数。例如c(5,2)=10,c(4,2)。可是当n,m比较大的时候,c(n,m)很大!于是小波希望你输出c(n,m)mod p的值。 【输入格式】   输入数据第一行是一个正整数T,表示数据组数(T<=100)。   接下来是T组数据,每组数据有3个正整数n,m,p(1<=m<=n<=10 9 ,m<=10 4 ,m<p<10 9 ,p是质数)。 【输出格式】   对于每组数据,输出一个正整数,表示c(n,m)mod p的结果。 【样例输入】   2   5 2 3   5 2 61 【样例输出】   1   10 分析 可以看到题目中的数据范围 1<=m<=n<

[Lucas定理][隔板法][容斥原理] Codeforces 451E Devu and Flowers

耗尽温柔 提交于 2019-11-26 23:24:16
题解 我们先考虑没有限制的情况怎么求,也就是在n个盒子里取出s个球的方案数,每个盒子可以不取就是隔板法C(n+s-1,n-1) 然后考虑减去每不合法的方案,也就是i个盒子取超的方案数 考虑容斥原理,容易想到容斥系数就是(-1)^i,那么就拿总方案数-1个盒子超+2个盒子超... 然后还是要用Lucas定理来求,因为n和m太大 代码 1 #include <cstdio> 2 #include <iostream> 3 #define ll long long 4 using namespace std; 5 const ll mo=1e9+7,N=30; 6 int n; 7 ll s,r,f[N]; 8 ll ksm(ll a,ll b) { for (r=1;b;b>>=1,a=a*a%mo) if (b&1) r=r*a%mo; return r; } 9 ll C(ll n,ll m) 10 { 11 if (m>n) return 0; 12 if (m>n-m) m=n-m; 13 ll ans=1ll,fac=1ll; 14 for (int i=1;i<=m;i++) ans=(ans*(n-i+1))%mo,fac=fac*i%mo; 15 fac=ksm(fac,mo-2),ans=ans*fac%mo; 16 return ans; 17 } 18 ll

[Lucas定理][组合] Bzoj P4403 序列统计

て烟熏妆下的殇ゞ 提交于 2019-11-26 23:16:28
Description 给定三个正整数N、L和R,统计长度在1到N之间,元素大小都在L到R之间的单调不降序列的数量。输出答案对10^6+3取模的结果。 题解 我们要求长度为n的元素在[1..r-l+1]中的单调不下降序列的数量 考虑将第i个元素加上i-1,那么每个合法序列就会对应一个长度为n,元素为[1..n+m-1]中的单调递增的序列数量 显然两者是一一对应的,那么就只用统计后面的贡献 那么就是在n+m-1个元素中选n个,就是C(n+m-1,n) 所以答案就是C(m,n+m)-1,然后用lucas定理算这个东东就好了 代码 1 #include <cstdio> 2 #include <iostream> 3 #define ll long long 4 using namespace std; 5 const ll mo=1e6+3; 6 ll n,l,r,T,ans,mul[mo],inv[mo]; 7 ll C(ll n,ll m) { return m>n?0:mul[n]*inv[mul[m]]%mo*inv[mul[n-m]]%mo; } 8 ll lucas(ll n,ll m) { return !m?1:(C(n%mo,m%mo)*lucas(n/mo,m/mo)%mo)%mo; } 9 int main() 10 { 11 mul[1]=mul[0]=1;