数论
crazy852456
这个作者很懒,什么都没留下…
展开
-
快速幂取模
就是在求a^b%m时,当A和B很大时用到的一种方法,基于二分的思想,可以达到O(logn)可以把b按二进制展开为:b = p(n)*2^n + p(n-1)*2^(n-1) +…+ p(1)*2 + p(0)其中p(i) (0这样 a^b = a^ (p(n)*2^n + p(n-1)*2^(n-1) +...+ p(1)*2 + p(0))原创 2013-05-21 23:54:10 · 793 阅读 · 0 评论 -
poj 3070 Fibonacci 矩阵快速幂
#include#include#include#include#include#include#includeusing namespace std;const int mod=10000;struct Matrix{ int m[15][15]; }num;Matrix mul(Matrix m1,Matrix m2){ Matrix ans; mems原创 2013-07-21 16:12:03 · 502 阅读 · 0 评论 -
poj 3270 Cow Sorting
这题和lrj黑书P247的那个例题一摸一样啊,听说还是2002年的WF的一道题,解题思路什么的就不写了,自己去黑书上看吧。#include#include#include#include#include#include#include#define mm(a,b) memset(a,b,sizeof(a))#define maxn 100010using namespace原创 2013-08-06 12:02:45 · 532 阅读 · 0 评论 -
ZOJ 3562 Alice's Sequence I
给出K个模方程,x = ai % mi,求出x在L,R区间内的解的个数,然后输出这些解,超过100个就只输出前100个解。这题和POJ 2891很像,那题只要求出最小的正解,于是只需要在那题的基础上改下就行了。#include#include#include#include#include#include#include#define LL long longusing原创 2013-08-12 16:32:47 · 611 阅读 · 0 评论 -
hdu 1395 2^x mod n = 1
给出n,求一个最小的正整数x,使得 2^x mod n = 1成立,若存在,输出2^x mod n = 1,否则输出2^? mod n = 1。分析:1、当n==1时,式子不成立;2、当n为偶数时,2^x也是偶数,所以式子也不成立;3、当n为奇数时,2与n互质,由费马小定理可知,x=n-1是该式子的一个解,所以就直接暴力找就行了。#include#include#inc原创 2013-10-28 16:56:13 · 811 阅读 · 0 评论 -
POJ 2096 Collecting Bugs(概率DP求期望)
入门题,题意:有n种bug,有s个子系统,bug有无穷多个,一个人每天能找出一个bug,bug出现的概率一样即1/n,在子系统出现的概率也是一样的1/s,要求找出每种bug至少在每个子系统都出现的期望(天数)。设dp[i][j]表示i种bug在j种子系统出现到目标状态所需的天数,那么有:当找到一个bug时,有4种情况:1、这种bug已经找到过,这种bug在j种子系统中出现过;2、这原创 2013-10-29 18:06:24 · 510 阅读 · 0 评论 -
大整数求组合数取余(Lucas定理)
【卢卡斯(Lucas)定理】Lucas定理用来求C(a,b)mod p的值,其中p为素数。数学表达式为:Lucas(a,b,q)=C(a%q,b%q)*Lucas(a/p,b/p,p);Lucas(a,0,q)=0;通过这个定理就可以很方便的把大数的组合转化成小数。但其中还是要求C(a%q,b%q)%p,所以这里引入逆元来求。【定义】若整数a,b,p原创 2013-08-06 16:23:27 · 2460 阅读 · 2 评论 -
hdu 1452 Happy 2004(快速幂取模)
求2004^X的因子和模29,用sum(2004^X)表示2004^X的因子和,sum(2004^X)=sum(4^X*3^X*167^X),sum()是积性函数,则有sum(2004^X)%29=sum(4^X)*sum(3^X)*sum(167^X)%29 =sum(2^(2*X))*sum(3^X)*sum(167^X)%原创 2013-11-07 18:37:05 · 650 阅读 · 0 评论 -
hdu 1796 How many integers can you find(容斥原理)
容斥原理给一个N和一个有M个元素的集合,求出比N 小且能被集合里的数整除的数的个数。直接枚举集合的最小公倍数,出现奇数次就加,偶数次减去。#include#include#include#include#include#include#include#include#include#define mm(a,b) memset(a,b,sizeof(a))using原创 2013-11-22 21:41:00 · 662 阅读 · 0 评论