![](https://img-blog.csdnimg.cn/20201014180756925.png?x-oss-process=image/resize,m_fixed,h_64,w_64)
数论
文章平均质量分 69
Jozky86
这个作者很懒,什么都没留下…
展开
-
CF980D Perfect Groups
CF980D Perfect Groups题意:将一个串划分为多个子集(不要求连续),要求同一子集内两任意元素的积为平方数定义一个串的答案为所需的最少子集个数一个长度为 n 的串有 n(n+1)2\frac{n(n+1)}{2}2n(n+1)个非空子串,求答案为 1,2,3,⋯ ,n1,2,3,\cdots ,n1,2,3,⋯,n 的非空子串个数题解:这个不应该是紫题。。先给结论:如果a,b,c∈N+a,b,c∈N^+a,b,c∈N+,ab=n2ab=n^2ab=n2,bc=m2bc=m^原创 2021-11-01 21:43:57 · 125 阅读 · 0 评论 -
FWT(快速沃尔什变换)
待更。。原创 2021-10-23 16:48:30 · 2002 阅读 · 0 评论 -
P1446 [HNOI2008]Cards
P1446 [HNOI2008]Cards题意:有n张牌,染三种颜色,每种颜色规定数目,给出m种不同的洗牌方法。两种染色方法相同当且仅当其中一种可以通过任意的洗牌法(即可以使用多种洗牌法,而每种方法可以使用多次)洗成另一种。求对P取模的结果题解:参考文章置换群,Polya引理和burnside引理(等价类计数问题)题目中说:输入数据保证任意多次洗牌都可用这m种洗牌法种的一种代替。这句话是burnside引理使用的理由,这句话保证了置换群的大小只会是(m+1)种(这个1指的是自己映射自己),否则原创 2021-10-18 20:53:32 · 100 阅读 · 0 评论 -
置换群,Polya引理和burnside引理(等价类计数问题)
参考文章:等价类计数问题Burnside引理&Pólya定理Burnside引理与Polya定理置换群和Burnside引理,Polya定理概念引入:离散数学应该学过置换群的相关概念,置换本质就是映射,可以理解成一个正方形绕其中心逆时针旋转90度,就可以看作是正方形四个顶点的置换。置换会形成一个环。且如果一个状态经过置换后跟原来相同,可以认为该状态为f的不动点。有些题目中经常出现”本质不同的方案数“,一般是指等价类的数目,题目定义一个等价关系,满足等价关系的元素属于同一等价类。等价关原创 2021-10-17 21:55:16 · 844 阅读 · 0 评论 -
二项式反演(非详细)
引入二项式反演又名广义容斥定理二项式反演可以表示成:f[n]=∑i=0n(−1)iCnigi⟺gn=∑i=0n(−1)iCnif[i]f[n]=\sum_{i=0}^n(-1)^iC_{n}^{i}g_{i}⟺g_{n}=\sum_{i=0}^{n}(-1)^iC_{n}^{i}f[i]f[n]=∑i=0n(−1)iCnigi⟺gn=∑i=0n(−1)iCnif[i]常用表达为:f[n]=∑i=0nCnig[i]⟺g[n]=∑i=0n(−1)n−iCnif[i]f[n]=\sum_{i原创 2021-10-13 21:40:24 · 603 阅读 · 0 评论 -
LGV定理
老早就听说,一直没学,今天遇到一个LGV比较裸的题,特地学习一下选自oi-wiki定义:e(u,v)表示u到v这条路径上所有边的边权之积(路径计数时,可以将边权都设为1),很多路径统计问题就是用到这一点引理:答案就是矩阵的行列式(可以用高斯消元来搞)用法:在路径统计问题中,我们会将边权设为1,e(u,v)常常用于表示从(a,b)走到(c,d)的方案数,一共要走sum=abs(c-a)+abs(d-b),其中挑选c-a步选择向下走,即Cc−a+d−bc−aC_{c-a+d-b}^{c-a}C原创 2021-10-01 14:57:58 · 685 阅读 · 0 评论 -
ICPC网络赛第二场G Limit
ICPC网络赛第二场G Limit题意:给你数组a和b,求解:1≤n≤100000,−100≤ai,bi≤100,0≤t≤5.1≤n≤100000,−100≤a_{i},b_{i}≤100,0≤t≤5.1≤n≤100000,−100≤ai,bi≤100,0≤t≤5.题解:要用到洛必达来做,首先明确一下,洛必达要求分母分子都趋于0什么情况是无穷?分母无限趋于0,分子为常数时,此时就是无穷情况那我们可以这样做,直接将式子洛必达t次,每次洛必达结束后判断,如果分母无限趋于0(即还存在x),分母原创 2021-09-26 22:17:51 · 344 阅读 · 2 评论 -
生成函数(母函数)
参考文章:生成函数(母函数)——目前最全的讲解《小学生都能看懂的生成函数从入门到升天教程》《生成函数全家桶》Acwing 进阶课程–生成函数引入任意给定一个无限长的序列a0,a1....an....a_{0},a_{1}....a_{n}....a0,a1....an....定义函数g(x)=a0x0+a1x1+a2x2+...+anxn+...g(x)=a_{0}x^{0}+a_{1}x^{1}+a_{2}x^{2}+...+a_{n}x^{n}+...g(x)=a0x0+a1x1+原创 2021-09-09 19:33:10 · 213 阅读 · 0 评论 -
P1447 [NOI2010] 能量采集
P1447 [NOI2010] 能量采集题意:如果一棵植物与能量汇集机器(坐标为0,0)连接而成的线段上有 k 棵植物,则能量的损失为 2k + 1给你一个n*m的植物园,问能量损失是多少1<=n,m<=1e5题解:本题所求式子为:∑i=1n∑j=1ngcd(i,j)∗2−1\sum_{i=1}^{n}\sum_{j=1}^{n}gcd(i,j)*2-1∑i=1n∑j=1ngcd(i,j)∗2−1式子如何求的?参考这个AcWing 201. 可见的点对于90%的数据,直接f原创 2021-09-08 13:02:46 · 103 阅读 · 0 评论 -
cf451E. Devu and Flowers(产生不同多重集数量)
cf451E. Devu and Flowers题意:有n个箱子,第i个箱子里有ai朵花,同一个箱子里花的颜色一样,不同箱子里的花颜色不一样。现在在这些箱子里选出m朵花组成一束,求一共有多少种方案。要求任意两束花都不一样题解:设第i个箱子里花的颜色是Bi,则本题就等价于从多集合S={A1 * B1,A2 * B2 …An * Bn}中选出M个元素能够产生的不同多重集的数量。根据多重集组合数的结论有:CN+M−1N−1−∑i=1NCN+M−Ai−1N−1+∑1<=i<j<=NCN+原创 2021-09-02 11:49:35 · 189 阅读 · 0 评论 -
P2480 [SDOI2010]古代猪文(数论好题)
P2480 [SDOI2010]古代猪文题意:给你n和g,求g∑d∣nCnd mod pg^{\sum_{d|n}C_{n}^{d}}\bmod pg∑d∣nCndmodpp=999911659题解:这个一个综合性很强的数论题涉及到欧拉定理,Lucas定理,中国剩余定理,挺好的一个题首先根据欧拉定理推论:若正整数a,n互质,对于任意的正整数b,有ab≡ab mod ϕ(n)( mod n)a^b \equiv a^{b\bmod \phi(n)}(\bmod n)ab≡abmodϕ(n原创 2021-08-26 17:26:58 · 427 阅读 · 0 评论 -
cf1553F. Pairwise Modulo
cf1553F. Pairwise Modulo题意:给你一个数组a,a由n个不同的数组成,让你求出对应的数组p数组p的定义为:pk=∑1≤i,j≤kaimod ajp_{k}=\sum_{1\leq i,j\leq k}a_{i} \mod a_{j}pk=∑1≤i,j≤kaimodaj题解:官方题解首先我们需要拜托mod操作,一个常用公式:xmod y=x−y∗⌊xy⌋x \mod y = x - y * \lfloor \frac{x}{y} \rfloorxmody=x−原创 2021-08-10 17:58:54 · 170 阅读 · 0 评论 -
Hash Function
Hash Function文章目录题意:题解:代码NTT代码FFT代码题意:给定n个互不相同的数,找一个最小的模域,使得它们在这个模域下互不相同。n<=5e5题解:考虑两个数a和b,a与b模m余数相同,当且仅当|a-b|能被m整除。这样问题就转化成找到一个最下的m,使得m不是任意一个|ai-aj|约数(不会被m整除)n<=5e5,所以直接暴力n2肯定不行这时就要用到FFT/NTT加速算N个数两两之差当然用FFT,利用多项式相乘即指数相加来做,(加减用指数,相乘用系数)刚接触F原创 2021-07-21 16:33:43 · 150 阅读 · 0 评论 -
欧拉函数(简单介绍+例题)
Acwing视频讲解欧拉函数:正整数n,欧拉函数是小于n的正整数中与n互质的数的数目N=p1a1 * p1a2 * p1a3 * …* p1ak如果pj是i的最小质因子红色区域一样经推导得:phi[i * pj] = phi[i] * pj如果pj不是i的最小质因子经推导:phi[i * pj]=phi[i] * (pj-1)#include<bits/stdc++.h>#define debug(a,b) printf("%s = %d\n",a,b);typedef原创 2021-07-10 18:32:18 · 839 阅读 · 0 评论 -
AcWing 220. 最大公约数
AcWing 220. 最大公约数题意:题解:题目就变成了AcWing 201. 可见的点当然有微调,因为可见的点里面是从0开始,本题从1开始,所以本题中phi[1]认为是0AcWing 201. 可见的点的题解代码:#include<bits/stdc++.h>#define debug(a,b) printf("%s = %d\n",a,b);typedef long long ll;using namespace std;inline int read(){原创 2021-07-10 18:31:17 · 198 阅读 · 0 评论 -
AcWing 201. 可见的点
AcWing 201. 可见的点题意:题解:我们先说结论:坐标(i,j),如果i和j互质,说明该坐标为可见为什么?我们想想什么样的坐标可见,什么样的会被挡住。光线是一个直线,在同一个直线上的点会被第一个点挡住,而所有光都从一个地方出发,也就是如果斜率一样,后面会被前面的挡住(暂时不考虑斜率不存在的情况)。对于坐标(i,j),斜率为k=i/j,如果i和j不互质,设gcd(i,j)=d,那么(i/d)/(j/d)也等于k,且(i/d,j/d)要比(i,j)小,前者会挡住后缀,这说明了i和j必须互质,原创 2021-07-10 18:15:35 · 292 阅读 · 1 评论 -
Knowledge is Power Gym - 102822K
Knowledge is Power Gym - 102822K题意:给你一个数n,让你将n分解成一些互质的数,然后这些数的最大值减最小值要求最小,如果不行输出-1,否则输出最大值减最小值的最小情况题解:具体做法是通过枚举大量数据找到规律如果n<=6,直接输出-1如果n是奇数,n可以分解成n/2和n/2+1,必互质,答案为1如果n是偶数,分多个情况A. n/2是偶数,可以分成n/2-1和n/2+1,必互质B. n/2是奇数,分情况:I. 如果n%3 = = 0,说明可以分成n/3原创 2021-07-09 15:00:25 · 192 阅读 · 0 评论 -
杜教BM模板(用于求线性递推公式第N项)
通过手动求出线性递推公式的前几项(一般要前8项),杜教BM模板可以直接求第n项是多少。。我才知道,离谱。。对于我来说是妙计//递推公式黑科技#include<bits/stdc++.h>using namespace std;///#define X first//#define Y second#define PB push_back//#define MP make_pair//#define MEM(x,y) memset(x,y,sizeof(x));//#define原创 2021-07-08 17:00:28 · 283 阅读 · 0 评论 -
Recursive sequence HDU - 5950
Recursive sequence HDU - 5950题意:给你一个式子:f[n]=2f[n-2]+f[n-1]+n4给你f[1]和f[2],给你一个n,求f[n]f[1],f[2],n<=231题解:很明显,矩阵快速幂,但是太久没做这种题,我都忘了怎么推导矩阵的了代码:#include <iostream>#include <cstdio>#include <cstring>#include <queue> using原创 2021-07-08 12:17:15 · 150 阅读 · 0 评论 -
Frogs HDU - 5514
Frogs HDU - 5514题意:有n个青蛙,第 i 个青蛙每次只能够跳 ai步,现在有m个石头围成一圈,编号为0到m−1,现在青蛙可以围着这个石头组成的圆跳无限次,每跳一次就会占领这个石头,可以无限占领,现在问你的是这n个青蛙占领的石头的编号的总和是多少。题解:参考博客肯定和容斥有关,但本人很无擅长容斥,所以不会。。。第一个方法(欧拉函数):对于第i个青蛙,他所能跳的步长为gi=gcd(m,ai),也就是所有编号为gi的倍数的石头,他都能占领现在有多个青蛙,就会存在一些位置被重复占领原创 2021-06-14 12:15:56 · 142 阅读 · 0 评论 -
Pagodas HDU - 5512
Pagodas HDU - 5512题意:一开始给你两个数a和b,你可以得到c通过,c=a+b,或者c=a-b,你所能得到的数的范围是1~n,两个人轮流操作,当有一方无法操作时,另一方获胜题解:c=a+b,c=a-b我们可以发现所得数都满足ax+by,而根据裴蜀定理:对于任意的正整数a,b,一定存在非零整数x,y,使得xa+yb=gcd(a,b),对于任意的xa+yb=d,d一定是gcd(a,b)的倍数所有1~n中可以被操作生成的数的数量为n/gcd(a,b),因为一开始给了你两个,所以还要减2原创 2021-06-14 10:55:57 · 188 阅读 · 0 评论 -
G List it all
传送题意:题解:我们来考虑以下样例:1,1,2我们先考虑1的贡献:如图(图中只花了)2!表示还剩两个空位,还有两个数未填入,所以是2!个对于n个数重复,考虑重复的情况就是:111…11(一共n个)* (n-1)! * sumsum为Σa[i] * i,即每个数出现的次数 *这个数的总和然后考虑去重:1,1,2所组成的重复情况有:112,112其中我用()括号来将1分号1(1)1(2)2,1(2)1(1)2也就是虽然这两个的1是不同贡献的,但是最终组成结果一样,所以要去掉,怎么去原创 2021-06-08 16:58:34 · 68 阅读 · 0 评论 -
HDU - 2204 Eddy‘s爱好(尚未完全解决)
HDU - 2204 Eddy’s爱好题意:给你一个正整数N,确定在1到N之间有多少个可以表示成M^K(K>1)的数题解:参考题解:我们先举例找找规律1~10以内2的次方有多少个?有12=1,22=4,32=9,一共三个,10开方(向下取整)为3也就是1~n之间k次方数有多少个 ,等于n(1/k),这算是个结论其实如果我们直接按这个计算,会发现有很多重复,比如有个数是2的次方,也有可能是4的次方,也有可能是6的次方,但是这些其实在2的次方中就已经计算了,而4,8是2的倍数,所以我们原创 2021-06-06 21:02:40 · 141 阅读 · 0 评论 -
Saving Beans HDU - 3037(卢卡斯定理)
Saving Beans HDU - 3037(卢卡斯定理)题意:他们想知道有多少种方法可以在n树中保存不超过m个bean(它们是相同的)。现在他们求助于你,你应该给他们答案。 结果可能非常巨大; 你应该输出模p的结果,因为松鼠无法识别大数。1 <= n,m <= 1000000000,p保证是一个素数题解:得到公式为:C(n+m,m)%p利用卢卡斯定理优化代码:代码中有两种求逆元的方式#include<bits/stdc++.h>using namespac原创 2021-06-06 21:19:08 · 132 阅读 · 0 评论 -
卢卡斯定理 Lucas
参考文章详细定义内容看这个参考文章结论:模板:Lucas函数:long long Lucas(long long n,long long m){ if(m==0) return 1; return Lucas(n/p,m/p)*C(n%p,m%p)%p;}组合数函数:此处求逆元的用的bp-2long long C(long long n,long long m){ if(n<m) return 0; if(m>n-m) m=n-原创 2021-06-06 21:19:33 · 159 阅读 · 0 评论