
数论
xjsong99
OI -> ACM -> AI
展开
-
noip2011 计算系数
地址:http://www.luogu.org/problem/show?pid=1313# 分析: 首先要知道二次项定理(和杨辉三角) 然后要知道组合式的递推方程 递推方程有两个,一个是C(n,m)=C(n,m-1)*[(n-m+1)/m] 另一个是C(n,m)=C(n-1,m-1)+C(n-1,m)原创 2015-07-27 20:00:10 · 1166 阅读 · 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 评论 -
BJTUOJ 连续数的和
题目:http://citel.bjtu.edu.cn/boj/problem.php?cid=1006&pid=1 分析: 1。一开始写了滑动窗口,T了,发现果然会超时。 2。遇到n比较大的这种情况怎么处理呢? 定理:若把n分解成两个数相乘,那么乘数必定有一个小于 (n)½ 3。对于这道题目,假设是i个数相加得到的n,设开始的数为x,则结束的数为x+(i-1) x,x+1,x+2,…,原创 2017-11-12 11:10:10 · 744 阅读 · 0 评论 -
CF#450 B.Position in Fraction
题目:http://codeforces.com/contest/900/problem/B 分析: 正解是抽屉原理? 想了一个骚方法:i从1-1e7循环,卡1秒的时限,出现c就break输出i,否则输出-1 代码:#include <cstdio>#include <algorithm>#include <cstring>#include <map>#include <queue>原创 2017-12-12 12:03:54 · 162 阅读 · 0 评论 -
求逆元的几种方法
给定一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 评论 -
牛客 - 等式
题目:https://www.nowcoder.com/acm/contest/90/F题意: 给定n,求1/x + 1/y = 1/n (x<=y)的解数。(x、y、n均为正整数)分析: 1/x + 1/y = 1/n xy=n(x+y) xy-nx-ny=0 (n-x)(n-y)=n^2 问题变为求n^2的因子个数由唯一分解定理,得: 已知若一个数x能质因数分解...原创 2018-03-26 21:58:16 · 344 阅读 · 0 评论 -
牛客 - 平分游戏
题目:https://www.nowcoder.com/acm/contest/90/C题意: n个人围坐一个圆,每人初始a[i]个硬币; 每秒钟有且仅有一个人把一个硬币给另一个人,两人必须相隔k人; 求最少多少秒后,使得每人手中硬币数相等。分析: 设其中num个人是可以相互给硬币的(组成一个小环),如下 (1)–X1–>(2)–X2–>(3)–X3–>……–X...原创 2018-03-27 22:27:03 · 626 阅读 · 0 评论 -
Codeforces 701D. As Fast As Possible (数学or二分)
题目:http://codeforces.com/problemset/problem/701/D 题意: n个人,一段路程为L,走路v1,坐车v2,每车最多坐k人,每人最多做一次车,求所有人到终点的最小时间。 分析: 首先,要想时间最短,所有人应同时到达终点; 那么,每个人的坐车、走路时间都相同。 法一:数学推导 设坐车时间为t,则车辆回头去接新人所花时间为t*(v2-v1)/(v...原创 2018-07-17 21:26:41 · 360 阅读 · 0 评论 -
Codeforces#499 E. Border (裴蜀定理)
题目:http://codeforces.com/contest/1011/problem/E题意: 有n种纸币,每种可以出任意多张,问k进制下余数有多少种,从小到大输出分析: 由裴蜀定理得: 若x1*a1+x2*a2+…+xn*an=m,则gcd(a1,a2…an)|m 所以余数为gcd的整数倍 考虑可能xi为负数,但只需将xi+=k*inf,余数不变,而xi变成符合题意的正数...原创 2018-07-27 10:21:25 · 434 阅读 · 0 评论 -
HDU6312 Game (2018多校第二场1004) (奇淫技巧+数论)
题目:http://acm.hdu.edu.cn/showproblem.php?pid=6312题意: 给n个数1~n; 一个人每次操作可以拿走一个数及它的所有因数; 不能操作者输; 求先手的输赢;分析: emmm(知乎题) 若先手面临的状态为输,那么先手拿1,后手面临必输状态; 若先手面临的状态为赢,那么后手还是必输状态;代码:#include <bit...原创 2018-08-06 10:24:27 · 310 阅读 · 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 评论 -
洛谷3807 卢卡斯定理 (Lucas定理模板题)
题目: https://www.luogu.org/problemnew/show/P3807代码:#include <bits/stdc++.h>using namespace std;typedef long long ll;const int tmax=1e5+5;ll fac[tmax],rev[tmax],p;ll C(ll n,ll m){ ...原创 2018-08-16 15:30:48 · 488 阅读 · 0 评论 -
中国剩余定理
讲的很好的一篇博客: https://www.cnblogs.com/MashiroSky/p/5918158.html转载 2018-08-16 16:41:17 · 768 阅读 · 0 评论 -
HDU1370 Biorhythms (中国剩余定理模板)
题目: http://acm.hdu.edu.cn/showproblem.php?pid=1370代码:#include <cstdio>#include <iostream>#include <algorithm>using namespace std;typedef long long ll;const int tmax=5;ll...原创 2018-08-16 17:40:35 · 357 阅读 · 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 评论 -
HDU2643 Rank (第二类斯特林数)
题目: http://acm.hdu.edu.cn/showproblem.php?pid=2643题意: n个人,有多少种排名方案,允许并列。分析: 问题转化: n个球,m个不同的盒子,盒子非空; 由f[n][m]表示:n个球,m个相同盒子,盒子非空的方案数; 那么m!*f[n][m]即为盒子不同的方案数; 而f[n][m]即为第二类斯特林数;递推关系: f[n][m...原创 2018-08-23 17:48:40 · 432 阅读 · 0 评论 -
HDU5512 Pagodas
题目: n个宝塔,编号1~n,其中只有两个塔a,b仍存在,两个人轮流重建宝塔,每次只能建造i+j或i-j号宝塔(i,j已存在并且i>j),谁最后不能建新塔谁输,问谁赢了 分析: 模拟几组数据之后得到,能够建的塔的编号都为gcd(a,b)的倍数,也就是说能够被重建的宝塔数量是有限的,为[n/gcd(a,b)]座,因此只需要判断这个数是否能被2整除 代码:#include <cstdio>#i原创 2017-10-05 10:57:13 · 369 阅读 · 0 评论 -
HDU5514 Frogs
题目: 给n个青蛙,每个青蛙每次跳ai步 给一串循环的石头,编号从0~n-1 求所有被青蛙踩过的石头的编号和 分析: 很容易得到,第i个青蛙跳的石头编号都是gcd(ai,m)的倍数 但m与n很大,接下来不能简单模拟 另g=gcd(ai,m) 第i个青蛙贡献的编号和为sum=∑k*g ,k=1,2,3,…[m/g] =(1+2+3+…..+[m/g])*g =[m/g]*(原创 2017-10-03 21:19:18 · 310 阅读 · 0 评论 -
HDU5974 A Simple Math Problem
题目: 已知X+Y=a,LCM(X,Y)=b,求X,Y a(1≤a≤2*10^4),b(1≤b≤10^9),数据组数T<12W 分析: 看数据组数这么大,一定是公式题 首先有结论:gcd(x,y)=gcd(a,b) 证明如下: 于是我们有方程组: X+Y=a XY=b*gcd(a,b) 解二元一次方程组,利用求根公式得到解,其中delta<0无解,而且开方时开出非整数或者最后原创 2017-10-01 22:22:34 · 194 阅读 · 0 评论 -
BestCoder#52 Victor and Toys
题目:http://acm.hdu.edu.cn/showproblem.php?pid=5419 分析:分母是C(m,3)。首先题意:三个区间的交集会对分子有贡献,即三个区间都包含元素a则a对分子有贡献。用差分前缀和预处理被几个区间覆盖,第i个对分子的贡献即wi*C(num[i],3)。注意各个变量是int还是longlong,坑死了。 代码:#include <cstdio>#incl原创 2015-08-24 18:12:42 · 378 阅读 · 0 评论 -
HDU4542 小明系列故事—未知剩余系
题目:http://acm.hdu.edu.cn/showproblem.php?pid=4542 分析:详见上上上篇博文 代码:#include <cstdio>#include <algorithm>#include <cstring>using namespace std;const int Tmax=500005,pri[20]={0,2,3,5,7,11,13,17,19,23原创 2015-09-29 16:24:28 · 554 阅读 · 0 评论 -
反素数深度分析
转自:http://blog.youkuaiyun.com/ACdreamers/article/details/25049767今天要我要讲的是反素数,在ACM中也算是常见的考点,那么对于搞ACM的同学来说,很有必要搞清楚它,所以接下来我会很详细地讲解。 在讲解反素数之前,我们先来看反素数的概念。 反素数的定义:对于任何正整数,其约数个数记为,例如,如果某个正转载 2015-09-29 11:42:13 · 539 阅读 · 0 评论 -
NOI库7653 地球人口承载力估计
题目:http://noi.openjudge.cn/math/7653/ 分析: 设每1亿人,每年消耗资源为1份 那么110亿人90年消耗资源: 110×90=9900份 90亿人210年消耗资源为: 90×210=18900份 每年新生资源: (18900-9900)/(210-90)=75份 为使人类能够不断繁衍,那么每年消耗的资源数量不能超过再生的资源数量 所以地球最多能原创 2015-09-30 11:27:31 · 10349 阅读 · 0 评论 -
ZOJ2562 More Divisors
题目:http://acm.zju.edu.cn/onlinejudge/showProblem.do?problemId=1562 分析:详见上上篇博文 代码:#include <cstdio>#include <algorithm>#include <iostream>using namespace std;const int pri[20]={0,2,3,5,7,11,13,17,原创 2015-09-29 15:27:33 · 369 阅读 · 0 评论 -
Codeforces27E Number With The Given Amount Of Divisors
题目:http://codeforces.com/problemset/problem/27/E 分析:详见上一篇博文 代码:#include <cstdio>#include <algorithm>using namespace std;const int pri[20]={0,2,3,5,7,11,13,17,19,23,29,31,37,41,43,47,53};int n;lo原创 2015-09-29 14:51:19 · 441 阅读 · 0 评论 -
NOI库7827 质数的和与积
题目:http://noi.openjudge.cn/math/7827/ 分析:类似正方形和最大问题,越平分越面积越大 代码:#include <cstdio>#include <algorithm>using namespace std;const int Tmax=10005;int n;bool v[Tmax];void init(){ int i,j; v原创 2015-09-30 14:36:40 · 1900 阅读 · 0 评论 -
NOI库7591 反质数
题目:http://noi.openjudge.cn/ch0407/7591/ 分析:详见前几篇博文 代码:#include <cstdio>#include <algorithm>using namespace std;const int Tmax=20000005,pri[20]={0,2,3,5,7,11,13,17,19,23,29,31,37,41,43,47,53};int原创 2015-09-30 16:58:45 · 788 阅读 · 0 评论 -
NOIP2009 Hankson 的趣味题
题目:http://www.luogu.org/problem/show?pid=1072# 分析: 1.gcd(x,a0)=a1; gcd(x/a1,a0/a1)=1; 2.x*b0=b1*gcd(x,b0); gcd(x,b0)=x*b0/b1; gcd(b1/b0,b1/x)=1; 然后√n 枚举判断上述两个结论,欧几里得算法是logn,所以时间复杂度是√n*logn原创 2015-10-20 17:11:32 · 2343 阅读 · 1 评论 -
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 评论 -
洛谷2651 添加括号III
题目:http://www.luogu.org/problem/show?pid=2651 分析:lrj数论第一题原题.然而我一开始写的素数分解= -开小了。。。 代码:#include <cstdio>#include <algorithm>#include <cstring>using namespace std;const int Tmax=10005;int n,a[Tmax]原创 2015-11-01 21:47:35 · 444 阅读 · 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 评论 -
扩展欧几里得 与 乘法逆元
这里只总结结论,具体推导过程(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 评论 -
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 评论 -
高斯消元(Gauss elimination)的算法实现
背景:在BJTU的课堂上,Kwak教授讲了Gauss elimination 、 LU分解 、 LDU分解 三种解方程的方法,下面为高斯消元的算法实现 算法:1、将矩阵转化为同解行阶梯型矩阵(上三角/Up triangle) 2、处理第i行时,选择fabs(A[i][i])最大的一行,与第i行交换(interchange) 3、由下至上依次回代求得Xn,Xn-1,Xn-2,…..,X2,X1原创 2017-09-12 21:12:45 · 1005 阅读 · 0 评论 -
异或线性积
基础知识学习: https://blog.sengxian.com/algorithms/linear-basis模板:对角线形:typedef long long llong;const int tmax=105,base=63; //base:基向量个数int n;llong a[tmax],b[base+5];void linear_base(){ for(int i...原创 2019-07-23 19:35:20 · 926 阅读 · 0 评论