
同余
xjsong99
OI -> ACM -> AI
展开
-
GCD 欧几里得和更相减损术
如图原创 2015-06-13 21:41:22 · 484 阅读 · 0 评论 -
HDU1808 Halloween treats (鸽巢原理/抽屉原理)
题目: http://acm.hdu.edu.cn/showproblem.php?pid=1808题意: 给定c,给n个数,且n>=c,求是否能选某些数,使得它们之和是c的倍数。分析: 首先设sum[i]=(sum[i-1]+a[i])%c; 由于余数只有c种可能性(c<=n,是较小的数),把它设为抽屉; 那么n个数sum[1]~sum[n]往抽屉里放; 由于n&...原创 2018-08-23 15:42:14 · 348 阅读 · 0 评论 -
中国剩余定理
讲的很好的一篇博客: https://www.cnblogs.com/MashiroSky/p/5918158.html转载 2018-08-16 16:41:17 · 768 阅读 · 0 评论 -
HDU6397 Character Encoding (2018多校第八场1001) (组合数学+容斥原理+逆元)
题目:http://acm.hdu.edu.cn/showproblem.php?pid=6397题意: m个桶,放k个小球,每个桶只能放0~n-1个球,求方案数分析: (1)由隔板法可知: 若没有少于n-1个的限制,则方案数为:C(k+m-1,m-1); 其实等价于,x1+x2+…+xm=k,(xi>=0)的解数(2)接下来容斥: 考虑有i个桶违反了规定,放了>...原创 2018-08-15 21:39:18 · 513 阅读 · 0 评论 -
Codeforces Gym 101498G. Super Subarray
题目: http://codeforces.com/gym/101498/problem/G题意: 给n个数,求有多少对[l,r]使得∑data[i] (i∈[l,r]) 能被任一data[j]整除 (j∈[l,r])分析: 设一堆数的和为sum,这堆数的最小公倍数为lcm; 若这堆数的和,能被任一数整除,则sum%lcm==0; (理解:最小的能被任一数整除的数就是lcm,...原创 2018-02-24 10:37:57 · 443 阅读 · 0 评论 -
Codeforces 908D New Year and Arbitrary Arrangement
题目: http://codeforces.com/problemset/problem/908/D题意:给定字符’a’出现的概率pa/(pa+pb),’b’出现的概率pb/(pa+pb); 给定一个正整数k,构造一个字符串,当出现至少k个子序列”ab”时停止构造; 问子序列”ab”出现次数的期望P/Q,输出P*(Q的逆元); 注意是子序列不是子串ab。分析:这个题特别难想! 一个 (dp原创 2018-01-01 22:00:15 · 693 阅读 · 2 评论 -
求逆元的几种方法
给定一a,逆元是指使a*x=1 (mod p)成立的x 一、扩展欧几里得 O ( logn ) 在前面的博客中已经提过了 http://blog.youkuaiyun.com/jerry99s/article/details/78169178 a*x=1 (mod p) a*x=p*(-y)+1 a*x+p*y=1; 扩展欧几里得求x 二、快速幂 O ( logn ) 费马小定理说:若p是原创 2018-01-01 19:53:48 · 6075 阅读 · 0 评论 -
ZOJ 3593 One Person Game
题目: http://acm.zju.edu.cn/onlinejudge/showProblem.do?problemId=4677 分析: 1、每步可以向左或向右走a/b/a+b步,我们先简化一下,只能走a/b步,则有方程a*x+b*y=abs(A-B) 2、求得x,y之后,我们思考怎么使步数最少:若能走a+b步,则其实也是由走a/b步组成的,那么首先要使|x|+|y|最小 3、怎么使原创 2017-10-31 23:34:49 · 251 阅读 · 0 评论 -
HDU1576 A/B
题目: http://acm.split.hdu.edu.cn/showproblem.php?pid=1576 分析: 我们有 A/B ≡ x (mod9973) 即 A/B = 9973*y + x 即 A = 9973*B*y + B*x 即 A%9973 = (B*x) %9973 = n 即 B*x ≡ n (mod9973) 即 B*x + 9973*y = n 这就原创 2017-10-07 15:21:23 · 235 阅读 · 0 评论 -
扩展欧几里得 与 乘法逆元
这里只总结结论,具体推导过程(http://blog.youkuaiyun.com/zhjchengfeng5/article/details/7786595)这位博客主写的非常详细 先贴一个欧几里得求gcd(a,b)的模板:long long gcd(long long a,long long b){ return b==0?a:gcd(b,a%b);}那么什么是扩展欧几里得? 就是求得ax原创 2017-10-07 13:24:53 · 1272 阅读 · 0 评论 -
POJ1061 青蛙的约会
题目: http://poj.org/problem?id=1061 分析: 我们可以知道x0+m*t≡y0+n*t (mod L) 也就是x0+m*t1+t2*L=y0+n*t1 化简得(m-n)*t1+L*t2=y0-x0 这就是ax+by=c的形式,其中a=(m-n),b=L,c=y0-x0 用扩展欧几里得即可求解t1 这里需要注意的是,m-n有可能为负数,求得的最大公因数可能原创 2017-10-07 14:33:25 · 222 阅读 · 0 评论 -
BZOJ1965 洗牌
题目:http://www.lydsy.com/JudgeOnline/problem.php?id=1965 分析:发现x[i]=(2*X[i-1])%(n+1),即L=x*2^m mod(n+1),2^m由快速幂算得,则问题转化为求同余方程2^m*x+(n+1)y=L的解,可由括展欧几里得算的2^m*x+(n+1)y=gcd(2^m,n+1)的解,然后乘以L/gcd(2^m,n+1),最后别忘原创 2015-10-28 17:08:33 · 407 阅读 · 0 评论 -
扩展欧几里得
一.朴素的欧几里得 gcd函数的基本性质: gcd(a,b)=gcd(b,a)=gcd(-a,b)=gcd(|a|,|b|)gcd(a,b)=gcd(b,a mod b) 证明:a可以表示成a = kb + r,则r = a mod b 假设d是a,b的一个公约数,则有 d|a, d|b,而r = a - kb,因此d|r 因此d是(b,a mod b)的公约数 假设d 是(b,a m原创 2015-09-30 08:23:51 · 373 阅读 · 0 评论 -
NOI库7650 不定方程求解
题目:http://noi.openjudge.cn/math/7650/ 分析:扩展欧几里得,详见上一篇博文 代码:#include <cstdio>#include <algorithm>using namespace std;int ans;int gcd(int a,int b){ return b==0?a:gcd(b,a%b);}void exgcd(int a原创 2015-09-30 10:14:25 · 1110 阅读 · 0 评论 -
NOIP2012 同余方程
题目:http://www.luogu.org/problem/show?pid=1082# 分析:裸的扩展欧几里得,直接求解。 代码:#include <cstdio>#include <algorithm>#include <cstring>using namespace std;void exgcd(long long int a,long long int b,long long原创 2015-09-01 19:24:10 · 489 阅读 · 0 评论 -
取模运算的性质
对于整型数a,b来说,取模运算或者求余运算的方法都是:1.求 整数商: c = a/b;2.计算模或者余数: r = a - c*b.求模运算和求余运算在第一步不同: 取余运算在取c的值时,向0 方向舍入(fix()函数);而取模运算在计算c的值时,向负无穷方向舍入(floor()函数)。例如:计算-7 Mod 4那么:a = -7;b = 4;第一步:求整数商c,如进行求模运算c = -2(向负无原创 2015-06-13 21:34:48 · 4022 阅读 · 0 评论 -
NOIP2014 解方程
题目:http://www.luogu.org/problem/show?pid=2312分析:我们很容易就会发现f(x+p) mod p=f(x) mod p于是我们选择一个小一些的p,预处理出0~p-1所有的f(x),然后超过p的取模即可但是p不够大会挂啊!于是我们多选择几个p 分别取一遍mod 只有一个值对所有的p取模之后全都0才算作解代码:#include <cstdio>#include原创 2015-06-13 21:32:46 · 364 阅读 · 0 评论 -
HDU 6595. Everything Is Generated In Equal Probability (期望+逆元)
题目: http://acm.hdu.edu.cn/showproblem.php?pid=6595分析:设f(n)=Calculate(Array)×Probability[Calculate(Array)],其中|Array|=n;即f(n)=E[Calculate(Array)],其中|Array|=n;则ans=[ ∑f(n) ] / N,n<=N;考虑f(n)如何求:考...原创 2019-07-25 10:59:48 · 946 阅读 · 0 评论