![](https://img-blog.csdnimg.cn/20201014180756928.png?x-oss-process=image/resize,m_fixed,h_64,w_64)
数论
Facico
生命是闪耀的此刻,不是过程,就像芳香不需要道路一样。
展开
-
指数取模的方法
简介xymodpx^y\mod p 当y很大的时候,怎么办?方法这里只讲当x与p互质时的情况。 所以x%p与p互质,那么就相当于x与p互质,就相当于p是个质数,所以根据欧拉定理 xφ(p)≡1(modp)x^{\varphi(p)}≡1(\mod p) 所以xyx^y就可以拆解成 xφ(p)∗φ(p)∗......∗φ(p)∗(ymodφ(p))modp=x1∗1∗......∗1∗φ(p原创 2016-07-08 19:11:31 · 10471 阅读 · 3 评论 -
【51Nod 1149】Pi的递推式
DescriptionF(x) = 1 (0 <= x < 4) F(n) = F(n - 1) + F(n - pi) (4 <= x) Pi = 3.1415926535….. 现在给出一个N,求F(n)。由于结果巨大,只输出Mod 10^9 + 7的结果即可。Solution之前在做斐波那契额数列的第n项的时候,可以考虑为从0开始,可以选择+1或+2,一直加到n的方案数。 那么这道题也原创 2017-02-18 08:52:31 · 763 阅读 · 0 评论 -
【NOIP2014八校联考第4场第1试10.19】无聊的游戏(game)
Description学校的运动会开始了,体能很菜的小可可没报任何比赛项目,于是和同学们玩一个十分无聊的游戏。 游戏在一个由n*n个方格组成的正方形棋盘上进行,首先在每个方格上均匀随机地填入1到m之间的正整数(每个方格填的数均不同),然后小可可均匀随机地选出k个1到m的数字(可能选的数不在棋盘上),把它们出现在棋盘上的方格涂黑,设有R行被整行涂黑,有C列被整列涂黑,小可可便可以得到2^(R+C)分原创 2017-01-17 21:48:35 · 903 阅读 · 0 评论 -
JZOJ 4934 【NOIP2017GDKOI模拟1.12】a
DescriptionSolution首先每个数可以加减无数次,那么最后肯定会剪成一个最小的正整数。 如果一个数a和b互相去减,那么最后减成的最小的正整数就是a和b最大公约数。 那么明显的,我们需要给所有的数两两之间去最大公约数,然后再对这些最大公约数去最大公约数。 最后得出来的这个数就是能得到的最小的正整数z。 很显然的一个性质就是,所有减出来的数都是z的倍数。 那么很显然,询问的数中是原创 2017-01-12 18:37:16 · 727 阅读 · 0 评论 -
【ZJOI2014】力
DescriptionSolution这是第一次打FFT,对于一个新算法,有模板题可以打还是吼开心的。 很明显的要把上面的><和qi给化掉。然后因为有要往后取得,所以把原序列翻转一下后面的放到前面来。 那么Fj=∑j−1i=0qi∗pj−i−∑j−1i=0q′ipj−iF_j=\sum_{i=0}^{j-1}q_i*p_{j-i}-\sum_{i=0}^{j-1}q'_ip_{j-i} q′表原创 2017-02-16 15:41:52 · 975 阅读 · 0 评论 -
【51 Nod 1203】JZPLCM
Description长度为N的正整数序列S,有Q次询问,每次询问一段区间内所有数的lcm(即最小公倍数)。由于答案可能很大,输出答案Mod 10^9 + 7。 例如:2 3 4 5,询问[1,3]区间的最小公倍数为2 3 4的最小公倍数 = 12。Solution一段数的最小公倍数中每个质数的指数就是这段数的这个质数出现的最大次数。 那么现在的问题就是怎么去维护一个质数的最大出现次数。 有很原创 2017-02-07 17:20:36 · 514 阅读 · 0 评论 -
【51Nod 1189】阶乘分数
Description1/N! = 1/X + 1/Y(0 < x<=y),给出N,求满足条件的整数解的数量。例如:N = 2,1/2 = 1/3 + 1/6,1/2 = 1/4 + 1/4。由于数量可能很大,输出Mod 10^9 + 7。Solution看到式子,直接考虑把式子简化,一般规律就是把等式两边全部变成乘号。 1n!=1x+1y{1\over n!}={1\over x}+{1\ove原创 2016-12-18 07:20:32 · 1048 阅读 · 0 评论 -
【51Nod 1610】路径计数
Description路径上所有边权的最大公约数定义为一条路径的值。 给定一个有向无环图。 T次修改操作,每次修改一条边的边权,每次修改后输出有向无环图上路径的值为1的路径数量(对1,000,000,007取模)。Solution我们看到gcd=1的这个东西,一定要想想容斥可不可以(1的倍数的个数-2的倍数的个数-3的倍数的个数-5的倍数的个数……这个可以直接用莫比乌斯函数来搞)。 设f[i]原创 2016-12-23 22:09:40 · 1132 阅读 · 0 评论 -
【NOIP2017提高组模拟12.17】环
Description小A有一个环,环上有n个正整数。他有特殊的能力,能将环切成k段,每段包含一个或者多个数字。对于一个切分方案,小A将以如下方式计算优美程度: 首先对于每一段,求出他们的数字和。然后对于每段的和,求出他们的最大公约数,即为优美程度。 他想通过合理地使用他的特殊能力,使得切分方案的优美程度最大。Solution很容易想到所有答案都是数字和的因数,而且答案会越来越小。 那么先分解原创 2016-12-17 19:32:44 · 928 阅读 · 0 评论 -
【51Nod 1556】计算
Description有一个1*n的矩阵 固定第一个数为1 其他填正整数 且相邻数的差不能超过1 求方案数%1e9+7的结果Solution我们观察一下从i推到i+1的数里面,除了是1的数要乘2,其他的都要乘3。 那么现在的问题就是在一个二维平面里面,从(0,0)走到(i,0)可以向上,向下向右走一格,但是只能在第一象限,有多少种走法? 到网上看看了,这个就是默慈金数: m[i]=m[i−1原创 2016-12-05 22:14:28 · 1054 阅读 · 0 评论 -
【51Nod 1383】整数分解为2的幂
Description任何正整数都能分解成2的幂,给定整数N,求N的此类划分方法的数量!由于方案数量较大,输出Mod 1000000007的结果。 比如N = 7时,共有6种划分方法。7=1+1+1+1+1+1+1 =1+1+1+1+1+2 =1+1+1+2+2 =1+2+2+2 =1+1+1+4 =1+2+4Solution看到这题就是一个递推题,在数学课上不听讲找原创 2016-12-05 21:17:41 · 1110 阅读 · 0 评论 -
【NOIP2017提高组模拟12.10】神炎皇
Description神炎皇乌利亚很喜欢数对,他想找到神奇的数对。 对于一个整数对(a,b),若满足a+b<=n且a+b是ab的因子,则成为神奇的数对。请问这样的数对共有多少呢?Solution要求ab是a+b的倍数,那么我们先设d=gcd(a,b)d=gcd(a,b) 设a′=ad,b′=bda'={a \over d},b'={b \over d} 所以d(a′+b′)|d2a′b′=>a原创 2016-12-12 21:59:01 · 1148 阅读 · 0 评论 -
【51Nod1120】机器人走方格 V3
DescriptionN * N的方格,从左上到右下画一条线。一个机器人从左上走到右下,只能向右或向下走。并要求只能在这条线的上面或下面走,不能穿越这条线,有多少种不同的走法?由于方法数量可能很大,只需要输出Mod 10007的结果。Solution这个东西一看就想到了卡特兰数。 那么答案就等于2∗Cn−12∗n−2n{2*C_{2*n-2}^{n-1}}\over n 然后用Lucas定理做一原创 2016-12-03 20:06:21 · 798 阅读 · 0 评论 -
【NOIP2016提高组复赛官】组合数问题
DescriptionSolution这道题很容易。 首先肯定要预处理,然后用矩阵前缀和。 可以用杨辉三角或者是分解质因数。 然后就没有了。Code#include<iostream>#include<cstdio>#include<cstring>#include<algorithm>#include<cmath>#define fo(i,a,b) for(i=a;i<=b;i++原创 2016-11-29 17:09:38 · 2291 阅读 · 0 评论 -
【NOIP2016提高A组集训第14场11.12】最近公共祖先
DescriptionYJC最近在学习树的有关知识。今天,他遇到了这么一个概念:最近公共祖先。对于有根树T的两个结点u、v,最近公共祖先LCA(T,u,v)表示一个结点x,满足x是u、v的祖先且x的深度尽可能大。YJC很聪明,他很快就学会了如何求最近公共祖先。他现在想寻找最近公共祖先有什么性质,于是他提出了这样的一个问题:n层的满k叉树T,求对于每一对(i,j)(1≤i,j≤T的点数),LCA(T,原创 2016-11-12 19:10:53 · 1005 阅读 · 0 评论 -
【51Nod 1180】方格射击游戏
DescriptionM*N的方格矩阵,一个人在左下角格子的中心,除他所站位置外,其他格子的中心都有一个敌人,他一次可发射一枚子弹干掉一条直线上的所有敌人,问至少要发射多少子弹才能干掉所有敌人。Solution在一条直线上如果经过了两个点及以上,那么第一个经过的点一定是互质的,因为经过的第一个点的斜率就可以确定,如果不是互质,那么肯定是在前面确定的。 所以答案等于2+∑n−1i=1∑m−1j=1(原创 2016-10-20 19:55:55 · 1112 阅读 · 0 评论 -
【51Nod 1363】最小公倍数之和
Description给出一个n,求1-n这n个数,同n的最小公倍数的和。 例如:n = 6,1,2,3,4,5,6 同6的最小公倍数分别为6,6,6,12,30,6,加在一起 = 66。 由于结果很大,输出Mod 1000000007的结果。Solution做这道题,这是历经波澜! ans=∑ni=1gcd(i,n)ans=\sum_{i=1}^n gcd(i,n) 设f原创 2016-10-04 22:21:07 · 1797 阅读 · 0 评论 -
【51Nod 1269 】Devu and Flowers
DescriptionN个盒子,每个盒子里面有一种颜色的花,数量为si,N个盒子里花的颜色各不相同,但同一个盒子里面的花认为是相同的,现在需要选出K朵花,有多少种不同的方案?由于结果很大,输出Mod 1000000007的结果即可。 例如:3个盒子,花的数量分别为1 3 2,需要选出5朵花,那么可以有如下3种方案:{1, 2, 2}, {0, 3, 2}, {1, 3, 1}。Solution一开原创 2017-01-19 18:07:41 · 628 阅读 · 0 评论 -
【NOIP2014模拟10.25A组】放棋子
DescriptionSolution首先要保证每行每列至少要有一个,那么就容斥一下,枚举有多少行或列没有选。 因为枚举选不选行和列是相对独立的,那么假设枚举了i行,j列,那么要知道容斥系数(−1)(i+j)(-1)^{(i+j)}。 然后枚举i,j之后,需要知道选出来的方案数Cin∗CjmC_n^i*C_m^j 然后在剩下的行中随便搞,有两种方案:1、可以不填,2、不能不填 fji表示吧i原创 2017-01-21 07:36:36 · 609 阅读 · 0 评论 -
【GDKOI2017模拟1.21】Equation
Description听着自己美妙的曲子,小Z进入了梦乡。在梦中,小Z仿佛又回到了自己纵横考场的年代。在梦中,小Z参加了一场考试,这场考试一共有n道题,每道题的最终得分都是一个大于等于0的整数。然而醒来后,小Z忘记了自己每道题的得分。他只记得自己计算过m次一些题目的分数和,每道题都被计算过,并且只被计算过一次。除此之外他还记得其中t道题的满分分别是多少(一道题的得分不会超过满分)。现在小Z想知道他这原创 2017-01-21 20:32:16 · 884 阅读 · 0 评论 -
【JZOJ5317】【清华集训模拟】func(辗转相除法、找规律)
DescriptionSolution这是一个可以找规律的题目,但是性质也是比较的好推。 我们可以观察相邻的两项i,i+1,f(i)、f(i+1)的值分别是对应着x、y,然后f(2*i)=x,f(2*i+1)=x+y,f(2*i+2)=y。 然后我们可以发现相邻的两个每次都*2,他们的值也是较小的加上较大的。 那么我们可以倒着推回来,每次值是较大的减较小的,然后判断是左边的较小还是右边的较小,原创 2017-08-23 22:48:00 · 481 阅读 · 0 评论 -
【JZOJ5250】【GDOI2018模拟】质数(数论)
DescriptionSolution要求2f(i)2^{f(i)}可以考虑狄利克雷卷积一下,或者讨论一下其中的性质。 对于所有不同的质因子,然后再2的次幂一下,很明显可以知道是选与不选的问题。 那么要求2f(i)2^{f(i)}就相当于求∑j|i[gcd(j,i/j)==1]\sum_{j|i}[gcd(j,i/j)==1] 我们要求gcd为1的个数可以考虑容斥一下。 那么上式就转化成∑j原创 2017-08-20 22:56:46 · 380 阅读 · 0 评论 -
【SDOI2011】【BZOJ2242】计算器
Description你被要求设计一个计算器完成以下三项任务: 1、给定 y、z、p,计算y^z mod p的值; 2、给定 y、z、p,计算满足xy≡z(mod p)的最小非负整数 ; 3、给定y、z、p,计算满足y^x≡z(mod p)的最小非负整数 。Solution一道裸的数论题。 ∙\bullet第一项任务,很简单快速幂。 ∙\bullet第二项任务,运用exgcd:原创 2016-08-01 12:09:56 · 1624 阅读 · 0 评论 -
【GDKOI2012模拟02.01】数字(找规律&&数论)
DescriptionSolution首先我们可以发现D(x)=(x−1)D(x)=(x-1)%9+1,就是说D(x)≡x(mod9)D(x)≡x(mod 9) 所以有x=D(x)+9kx=D(x)+9k 那么A=D(x)x=D(x)(D(x)+9k)=D(x)2+9kD(x)A=D(x)x=D(x)(D(x)+9k)=D(x)^2+9kD(x) 然后这个的方案数就是(r−D(x)2)9∗D(原创 2017-07-15 21:53:40 · 499 阅读 · 0 评论 -
【HNOI2016模拟4.4】Fenwit
DescriptionSolution虽然这题还有很多的方法,但是这类型的题目斗游戏一个通用的做法FWT(快速沃尔什变换),而且非常的短。 首先我们可以把式子转化成: Fi+1[jk]=∑k=02M−1Fi[k]∗B[Cnt(j)]F_{i+1}[j^k]=\sum_{k=0}^{2^M-1}F_{i}[k]*B[Cnt(j)] 根据异或的性质,这个很显然。 然后就用后面的两个数组做FWT,原创 2017-07-14 22:34:13 · 483 阅读 · 0 评论 -
JZOJ 5224【GDOI2018模拟7.12】C(数论&&杜教筛)
DescriptionSolution这题直接用反演可以过70分。 但是一看到这种题就反演还是不行。 我们表示gcd(i,j)=dgcd(i,j)=d还可以用gcd(id,jd)=1=φ(id),i≥jgcd({i\over d},{j\over d})=1=\varphi({i\over d}),i≥j来搞 ∑i=1n∑j=1ngcd(i,j)k\sum_{i=1}^n\sum_{j=1}^原创 2017-07-14 22:13:25 · 487 阅读 · 0 评论 -
【GDOI2018模拟7.9】相逢是问候
DescriptionSolution首先我们要知道一个叫做扩展欧拉定理的东西: cxmodp≡cxmodφ(p)+φ(p)∗[x>=φ(p)]modpc^x\mod p≡{c^{x\mod \varphi(p)+\varphi(p)*[x>=\varphi(p)]}}\mod p 如果我们要求ccxc^{c^x} 那么就是 ccxmodp≡ccxmodφ(p)+φ(p)∗[x>=φ(p)]原创 2017-07-10 20:20:56 · 538 阅读 · 0 评论 -
【GDSOI2017】魔兽争霸 x
DescriptionSolution这道题转换一下模型其实就是有很多个带权向量,然后给你一个矩形,给每个向量加一个系数,使得长宽都不超过矩形且权值和最大。 很容易就可以证明出来只需要两个向量就可以了,如果有第三个有系数的,那么就说明这种情况的时候第三个更优,那么还不如直接用第三个替换掉一个。 那么我们现在知道了只用选两个,那么我们该怎么去做这道题? 首先肯定要n2n^2的去枚举,然后我们知道原创 2017-05-07 10:58:13 · 710 阅读 · 0 评论 -
【SDOI2008】【BZOJ2186】沙拉公主的困惑
Description 大富翁国因为通货膨胀,以及假钞泛滥,政府决定推出一项新的政策:现有钞票编号范围为1到N的阶乘,但是,政府只发行编号与M!互质的钞票。房地产第一大户沙拉公主决定预测一下大富翁国现在所有真钞票的数量。现在,请你帮助沙拉公主解决这个问题,由于可能张数非常大,你只需计算出对R取模后的答案即可。R是一个质数。Solution很显然,比m!小的与m!互质的个数,当他们* 2,* 3,*…原创 2016-08-14 23:00:19 · 828 阅读 · 0 评论 -
BSGS算法学习小记(大步小步算法)
简介原创 2016-08-04 22:12:15 · 4452 阅读 · 0 评论 -
【SDOI2017】数字表格
DescriptionSolution这道题明显可以用莫比乌斯反演来做,非常的裸的繁衍。 假设n < m ans=∏ni=1∏mj=1f[gcd(i,j)]ans=\prod_{i=1}^n\prod_{j=1}^mf[gcd(i,j)] 那么直接枚举gcd=d ans=∏nd=1f[d]g[d]ans=\prod_{d=1}^nf[d]^{g[d]} g[d]表示gcd=d的个数g[d]原创 2017-04-18 21:09:11 · 1262 阅读 · 2 评论 -
【CQOI2014】数三角形
DescriptionSolution这题是一个很水的题目,但是一开始就往较难想的地方想,结果细节搞不出来。 很明显的正难则反。 那么现在的问题就是求三点共线的数量总数。 很明显要枚举类似斜率的东西,然后考虑这条线过多少个点,然后算。 但是会发现这样算起来非常的麻烦。 所以我们考虑先固定两个点,然后求这两个点中间的点的个数,最后再求出这个图中可以放多少条这样的线。 枚举这条线在x轴和y轴原创 2017-03-04 20:26:45 · 787 阅读 · 0 评论 -
【51Nod 1184】第N个质数
Description第1个质数是2,第3个质数是5,给出一个数N,求第N个质数。Solution很明显这个要二分答案。 现在的主要问题就是求f[i]表示i里面有多少个质数。 这里可以用个非正式的洲阁筛。 设 f[i]表示i以内有多少个质数f[i]表示i以内有多少个质数 p[i]表示第i个质数p[i]表示第i个质数 g[i][j]表示前i个数不被p[1...j]整除的数有多少个g[i][原创 2017-01-26 22:14:31 · 1907 阅读 · 4 评论 -
【51Nod 1362】搬箱子
Description有一个n*m的棋盘,左上角为(0,0),右下角为(n,m).在左上角有一个箱子(箱子是放在交叉点上的)。现在要把箱子搬到最后一排。搬的时候只有向右,向下,或者向右下方走一步。也就是说,假如箱子在(x,y),那么下一步只能把他搬到(x+1,y)或(x,y+1)或(x+1,y+1).问有多少种的走法可以把箱子从左上角搬到最后一排。由于数目巨大,对X取余输出即可。Solution设f原创 2017-02-14 16:01:25 · 1215 阅读 · 0 评论 -
【51Nod 1333】 无聊的数学家们
Description问题来自于一个精彩的故事: 有三个数学家,A,B与C。A选了两个正整数x与y满足x<=y。然后,A将x+y的值告诉了B,A又将x*y的值告诉了C。B与C都不知道x与y分别是什么,也不知道对方得到的值是什么。但B和C知道A告诉B的值是某两个正整数的“和”而告诉C的值是这两个数的“积”。而且这三个数学家的数学功底足够好。下面是B与C进行的对话: B:“我确定你一定没有百分百的把原创 2017-01-23 15:30:38 · 946 阅读 · 0 评论 -
【51Nod 1187】寻找分数
Description给出 a,b,c,d, 找一个分数p/q,使得a/b < p/q < c/d,并且q最小。例如:1/3同1/2之间,符合条件且分母最小的分数是2/5。(如果q相同,输出p最小的)Solution一开始简单的二分,结果用了好久的时间来搞,发现有问题。 其实当时隐隐约约想到用类欧几里得算法来做,但是并没有打过不敢打。 咨询了一下大佬之后,发现就是类欧几里得算法。 设当前的答案原创 2017-01-21 22:43:28 · 1126 阅读 · 0 评论 -
【NOIP2016提高A组集训第9场11.7】Simple
DescriptionSolution一开始就想到了扩展欧几里得。 但是发现都要是非负整数,所以直接做不行。然后枚举一下n的系数,直接算出m的系数,虽然这是错误的方法,但是有50分。 用上面的方法ans=∑⌊qn⌋x=0q−x∗nm+(x!=0)ans=\sum_{x=0}^{\lfloor{q\over n}\rfloor}{q-x*n\over m}+(x!=0) 因为x=0的时候y不能等原创 2016-11-07 17:29:35 · 577 阅读 · 0 评论 -
【NOIP模拟】算循环
DescriptionSolution这题很简单。 分别考虑每个点的贡献。 ans=∑∑x∗y∗(n−x+1)∗(n−y+1)ans=\sum \sum x*y*(n-x+1)*(n-y+1) 那么拆一下,就是x和y的答案分别乘起来。 比如说x的答案:∑x∗(n+1)−x∗x\sum x*(n+1)-x*x 那么用一下平方和公式和等差数列求和就好了。Code#include<iostrea原创 2016-10-15 14:41:38 · 558 阅读 · 0 评论 -
【NOIP2016提高A组集训第7场11.4】分解数
DescriptionDpstr学习了动态规划的技巧以后,对数的分解问题十分感兴趣。 Dpstr用此过程将一个正整数x分解成若干个数的乘积:一开始令集合A中只有一个元素x,每次分解时从A中取一个元素a并找出两个大于1且互质的整数p,q,要求pq=a,然后将a分解成两个元素p和q,也就是从A中删去a并加入p和q。Dpstr把正整数x用该过程能分解的次数的最大值称为x的分解数。 例如66的分解数为2原创 2016-11-04 20:54:53 · 989 阅读 · 0 评论 -
【51Nod 1246】罐子和硬币
Description有n个罐子,有k个硬币,每个罐子可以容纳任意数量的硬币。罐子是不透明的,你可以把这k个硬币任意分配到罐子里。然后罐子被打乱顺序,你从外表无法区别罐子。最后罐子被编上号1-n。每次你可以询问某个罐子,如果该罐子里有硬币,则你可以得到1个(但你不知道该罐子中还有多少硬币),如果该罐子是空的,你得不到任何硬币,但会消耗1次询问的机会。你最终要得到至少c枚硬币(c <= k),问题是给原创 2016-07-05 14:56:48 · 675 阅读 · 0 评论