数论
文章平均质量分 82
High_EnergyElectron
这个作者很懒,什么都没留下…
展开
-
解题报告:HDU_6185 Covering (轮廓线DP+高斯消元+矩阵快速幂)
题目链接题意:给一个4*n的表格,你有两种矩阵(1*2),(2*1),询问放满的方案数。n思路:显然公式应该是一个线性递推方程,知道后可以用矩阵快速幂在O( log(n) * m^3 )求得答案(m为方程的项数)为了求这个方程,我们可以用轮廓线DP求的方程的前k项然后假设一个k>m,用高斯消元求k*k的矩阵的秩,从而求得m再用高斯消元求得方程即可原创 2017-09-03 10:53:34 · 771 阅读 · 0 评论 -
解题报告:HDU_6042 Journey with Knapsack 生成函数
题目链接题意:你有一个容量为2*n的背包,现在有n种食物,第i种事物的体积为i,数目为ai个。还有m种武器,每种武器体积为bi。现在要求背包里装一个武器,任意食物的方案数。思路:官方给的就很详细了Orz......不懂五边形数定理的同学可以看维基的介绍:五边形数定理、分割数代码:#includecon原创 2017-07-26 19:14:04 · 909 阅读 · 0 评论 -
解题报告:HDU_5909:Tree Cutting 树上FWT
题目链接题意:给定一棵树,树上每个结点有它的权值,现在问在树上选一些连通的点,使得这些点的权值的异或结果 等于0~m-1的时对应的方案数。思路:对每个子树统计选定根的方案数,那么答案为:因为每个分支可以选也可以不选,那么在进行FWT之前对每个儿子进行dp[son][0]++的操作代码:#includeconst int mod = 1e9原创 2017-08-03 20:53:16 · 224 阅读 · 0 评论 -
解题报告:CodeForces - 662C:Binary Table FWT(快速沃尔什变换)
题目链接题意:给定一个至多20*100000的01矩阵,可以选择任意行或列,选择行或列的01值改变,问经过操作能到最少的含1的数量。思路:因为行最大为20,考虑将每一列压缩成一个20位的整数,选择的行也最多只有20,同样压缩到一个20位的整数。改变行上的01值,对应的操作为异或,那么就能写出对应的卷积式:根据异或运算的性质,可以交换j,k的位置,得到:C[k原创 2017-08-03 08:50:21 · 803 阅读 · 0 评论 -
解题报告:HDU_5656 CA Loves GCD DP
题目链接题意:给n个不同的数,求所有非空子集的gcd之和思路:dp[ i ] 表示 gcd 为 i 的子集数每读入一个新的数x,可以如果将x与gcd为i的放在一起会导致gcd(x,i)的方案数增加dp[ i ] 种如果 i = x,那么还会额外多一种方案(只放x)。因为 较小的gcd(x,i)可能会用到同阶段的较大的 i ,所有操作顺序要从小到大。原创 2017-07-24 20:17:59 · 250 阅读 · 0 评论 -
解题报告:HDU_6061 RXD and functions NTT
题目链接题意及官方题解:思路:先感谢Q巨指点Qrz...先求得系数式:拆开组合数:把系数提取出来稍作变换:整理一下:得到:然后就可以直接进行NTT了。。代码;#includeconst int mod = 998244353;const int N = 4e5+10;con原创 2017-08-02 10:27:38 · 1562 阅读 · 2 评论 -
解题报告:POJ_3904 Sky Code 莫比乌斯反演|容斥
题目链接题意:给定n个数,要求从中选出4个数,使得这4个数的最大公因子为1,求满足条件的组数。思路:简单的容斥,用f(x)表示最大公因子为x的倍数的组数,那么答案为:ans = 代码:#include#include#includeusing namespace std;const int N = 1e4+10;int原创 2017-07-24 15:08:47 · 314 阅读 · 0 评论 -
解题报告:SPOJ - VLATTICE Visible Lattice Points 莫比乌斯反演
题目链接题意:有一个边长为n的立方体,你位于(0,0,0)处,问能看见的格子数目。某个格子能被看见当且仅当它与原点的连线上不存在其他的格子。思路:之前做过一个二维的版本:HDU2841 Visible Trees 莫比乌斯反演思路是差不多的,分成三个部分求:对于(x!=0&&y!=0&&z!=0)的所有点,要求 gcd(x,y,z)==1的点数原创 2017-07-24 14:45:20 · 244 阅读 · 0 评论 -
解题报告:BZOJ_2154: Crash的数字表格 莫比乌斯反演
题目链接题意:给定n,m(思路:预处理和的前缀和,这样就能在时间内得出结果总复杂度为代码:#includeusing namespace std;const int mod = 20101009;const int N = 1e7+10;vectorpr;bool Np[N];int mu[N];in原创 2017-08-01 08:49:22 · 365 阅读 · 0 评论 -
解题报告:BZOJ_3994 约数个数和 莫比乌斯反演学习题
题目链接题意:给定n,m,求公式,d(x)为x的约数个数思路:这题比较适合反演的学习,因为要用到反演经常用的技巧(公式)首先需要将d(ij)进行变化,这里有公式:( 这个公式还可以推到两个,三个的乘积 )那么就可以推到:然后就出了gcd()==1的式子,这时候就可以用莫比乌斯反演经常会用到的公式之一:将公式变化整理一下为:下一原创 2017-07-18 09:25:55 · 478 阅读 · 0 评论 -
解题报告:HDU_5663 Hillan and the girl 莫比乌斯反演
题目链接题意:a为小于等于n的正整数,b为小于等于m的正整数,求gcd(a,b)为平方数的计数思路:一个直接暴力的做法就是分别求每个平方数的计数,然后加起来这样的复杂度为极限数据时达到了O(1e10)的时间复杂度,肯定是会超时的。换个思路:令f(x)表示gcd(a,b)为x的组数,它的答案为我们要求的是f(1)+f(4)+f(9)原创 2017-07-31 19:27:34 · 477 阅读 · 0 评论 -
解题报告:Prime Distance On Tree 点分治 + FFT
题意:给定一个树(结点数,问树上任意选两点,它们之间的点距为素数的概率。思路:很容易想到点分治统计答案,然后只需要统计经过根结点的,这个步骤很容易想到两两儿子之间进行fft,很明显会超时,那么可以逆向算,先统计所有子树结点之间,然后减去每个子树和自己子树之间的,然后除以2(因为起点终点交换算同一种)那么我们就能在O(nlog(n))内统计经过根节点的各个路径长度的计数,注意每个原创 2017-07-10 11:25:48 · 430 阅读 · 0 评论 -
解题报告:HDU_6053 TrickGCD 莫比乌斯反演
题目链接题意:给一个长度为n的数组A,让你构造等长的数组B,B数组中的元素取值为小于等于A数组中对应位置的元素,现在询问B数组中的gcd大于等于2的方案数思路:很容易推出反演式:转换一下f ( i , d ) 为 [ a / d ] = i 的A数组中的元素个数,用一个前缀和数组维护就好那么复杂度就降到了O( n log(n)) 了代码原创 2017-07-27 18:01:17 · 2295 阅读 · 2 评论 -
解题报告:BZOJ_3529:数表 莫比乌斯反演+离线处理
题目链接题意:一张n*m的表格,( i , j )的格子上的数为gcd( i , j ) 的约数和,询问所有格子的不超过a的数之和,T组数据。1思路:这题很多细节不是很容易想到。。为了方便表述,定义:F(x):x的约数和,可以预处理得到G(x):满足题目的gcd==x的组数我们先分析g[i]:得到:这个看上去已经很原创 2017-08-07 21:25:45 · 310 阅读 · 0 评论 -
解题报告:HDU_6102 GCDispower (离线处理+莫比乌斯反演)
题目链接题意:给一个全排列,每次询问一个区间的函数官方题解:思路:题解已经说的很详细了Orz....记录一下容斥反演的部分令num(d)为已经扫过的数中d的倍数的个数,预处理出每个数的有效因子(对应的反演系数不为0),就能在均摊O(log(n))的时间得出那么每个当前正在扫的数对它前面的区间的贡献为A[r]为当前的右端原创 2017-08-11 11:06:50 · 540 阅读 · 0 评论 -
解题报告:HDU_6128:Inverse of sum (二次剩余)
题目链接题意及官方题解:思路:已知公式:转换一下:对于每个y,满足要求的x为:只需要求的y的系数在(%mod)意义下的等价式即可等同于求sqrt(-3)的等价式,也就是求p-3在(%mod)意义下的二次剩余( Cipolla's algorithm )注意一些细节:不考虑0、mod=2、mod=3、x==y时的计数 以及 不存在p-3原创 2017-08-18 16:39:43 · 345 阅读 · 0 评论 -
解题报告:HDU_6123 Destroy the cube (容斥+三元环计数)
题目链接题意及官方题解:记录一下自己的做法:首先如果可以直接跑全部的黑色位置,那就很好写,但是肯定会超时,所以一定要用对称性优化。如果n为偶数,可以完美拆成八个完全一样的小正方体的子问题,很好写如果n为奇数,问题就变得复杂而且要考虑各种细节。。先不考虑最中间的面,解决八个小正方体的子问题把中间面的所有黑色位置建图跑三元环然后发现会有重原创 2017-08-30 20:25:12 · 807 阅读 · 0 评论 -
解题报告:Codeforces Round #432 (Div. 2) D. Arpa and a list of numbers 暴力
题目链接题意:给定一个序列含n个数,定义这个序列为good当序列里的所有数的gcd>1,你有两种操作:1:删除一个数,代价为x2:将一个数加一,代价为y求把序列变成good的最小代价思路:如果知道gcd,可以在O(n)内求出最小代价可以发现性质:当n个数中公因子越多,选这个公因子做gcd需要变动的数越少,代价可能会越低于是枚举时限内尽原创 2017-09-05 10:05:02 · 329 阅读 · 0 评论 -
解题报告:HDU_6035 Colorful Tree 树上计数
题目链接题意:给定一棵树,树上每个结点都有一种颜色,询问路上任意两点之间的路径上包含的不同颜色数目和。思路:正着求不好求,先认为所有的路径上包含所有出现过的颜色,那么只需要减去每个颜色没有出现过的路径之和。官方题解:单独考虑每一种颜色,答案就是对于每种颜色至少经过一次这种的路径条数之和。反过来思考只需要求有多少条路径没有经过这种颜色即可。直接做可以采原创 2017-07-26 08:54:40 · 532 阅读 · 0 评论 -
解题报告:HDU_6122 Color the chessboard (计数)
题目链接题意及官方题解:思路:分析题意可以发现计数只需要维护2*2的矩阵满足题目要求即可将奇数格的颜色翻转发现矩阵只会有三种形式:1、每一行颜色相同2、每一列颜色相同3、全部的颜色相同然后容斥一下即可代码:#includeconst int mod = 998244353;const int N = 1e3+5;using n原创 2017-08-21 17:25:41 · 365 阅读 · 0 评论 -
解题报告:HDU_6129 Just do it (找规律 两种做法)
题目链接题意及官方题解:思路:看到另一种做法,要巧妙一点,记录一下解法一(官方):打出当前位对后面位的贡献表,发现是个斜杨辉三角只有组合数为奇数才用贡献,由Lucas可知组合数C(n,m)为奇数等价于(n&m)==m这样就可以枚举m(1~n-1)快速更新答案虽然复杂度看上去是O(n^2),但是满足要求的组合数并不多(不会证明。。),能原创 2017-08-21 21:24:32 · 320 阅读 · 0 评论 -
解题报告:CROC 2016 - Elimination Round F. Cowslip Collections (莫比乌斯反演)
题目链接题意:给定一个大小为n(n每次询问给往集合中插入一个数,求当前集合的贡献集合的贡献为所有大小为k的集合的gcd之和思路:刚开始想歪了令f[ x ]:集合大小为k且gcd()==x的集合数量num[ x ]:所有的数中x倍数的个数那么答案为刚开始想歪了:想用树状数组维护后面的部分,均摊复杂度应该能过。。但是维护树原创 2017-08-14 20:04:57 · 340 阅读 · 0 评论 -
解题报告:Codeforces Round #146 (Div. 1) E. Number Challenge 莫比乌斯反演
题目链接题意:给定n,m,l,求d(x):x的约数个数思路:加强版的约数个数和 (解题报告:BZOJ_3994 约数个数和 莫比乌斯反演学习题)?代入公式得到得到代入常用的公式:得到:这个式子的复杂度为但是可以发现对于一个数k,只需要用到和它互质的部分那么可以在的时间内预测出每个数的互质的所原创 2017-08-12 20:13:01 · 513 阅读 · 0 评论 -
解题报告:HDU_4947:GCD Array 莫比乌斯反演+树状数组
题目链接题意:长度为n的数组,初始值为0。有两种操作:①给定a,b,x,将所有下标 i 满足 gcd(a,i)==b的位置加上x②给定x,查询 1~x 的前缀和思路:对于操作①,显然无法更新所有的满足要求的下标稍作分析可以发现,对于每次更新操作的贡献,只需要更新每个反演式的第一个位置那么查询的时候,每个位置的贡献就是( x/i )因为原创 2017-08-07 15:20:40 · 332 阅读 · 0 评论 -
解题报告:Codeforces Round #325(Div. 1) E. Present for Vitalik the Philatelist (莫比乌斯反演)
题目链接题意:给n(n能从中选出一个数x,在从剩下的数中选出一个非空集合S,满足:S的gcd不为1,gcd(S,x)为1询问满足的方案数闲扯:本来O(nlog(n))的想法,交上去一直T。。。以为卡常数,优化了还是T。。。发现中间有个部分写成O(n*sqrt(Ai))的级别。。。改了后3000+ms过了。。。思路:原创 2017-08-13 21:13:18 · 316 阅读 · 0 评论 -
解题报告: Codeforces Round #305 (Div. 2) E.Mike and Foam (莫比乌斯反演)
题目链接题意:有一个长度为n(n序列中的每个位置对应一个数ai(1每次操作给一个数x,代表挑出的序列中的下标为x的数若对应下标的数已经被挑出,那么就把它放回去每次操作完,询问所有挑出的数中互质的对数刚开始时所有数都没有被挑出思路:刚开始的没有数被挑出,那么初始答案为0。令num[i] :挑出的数中 i 的个数如果当前操作的数为x,原创 2017-08-12 22:06:58 · 238 阅读 · 0 评论 -
解题报告:HDU_6134:Battlestation Operational (莫比乌斯反演)
题目链接题意:求思路:本来出题人想考的不是反演,但是用反演做意外的简单。。原式:做反演:令易知: ( D( x ) 为 x 的因子个数 )那么可在内预处理出 g() ,再在线性时间内得到g()的前缀和每次查询的复杂度,总复杂度代码:#includeconst int N = 1e6+10;const l原创 2017-08-18 17:06:13 · 259 阅读 · 0 评论 -
解题报告:LightOJ - 1027 A Dangerous Maze 概率期望
题目链接题意:给定n个数,每次等概率的随机选一个数,直到选到正数,询问选到的数绝对值之和的期望,若为无穷大输出inf思路:考虑每次选择的贡献为,结束的概率为选中正数的概率 ,两者相乘就是最后的答案即:所有数绝对值之和除以正数的个数,若不存在正数,那么为inf这题还可以用公式解,先写出期望的公式,然后用错位相减法可以求的期望的通项公式,也是上面原创 2017-07-17 11:18:33 · 311 阅读 · 0 评论 -
解题报告: Codeforces 396A. On Number of Decompositions into Multipliers 组合
题目链接题意:给你n个数,m为这n个数的乘积原创 2017-07-07 10:20:57 · 301 阅读 · 0 评论 -
解题报告:HDU4549 M斐波那契数列 数论三大基础(快速幂+矩阵快速幂+费马小定理)
M斐波那契数列Time Limit: 3000/1000 MS (Java/Others) Memory Limit: 65535/32768 K (Java/Others)Total Submission(s): 2843 Accepted Submission(s): 853Problem DescriptionM斐波那契数列F[n]是一种整数数列,它的定义原创 2016-08-08 17:02:02 · 432 阅读 · 0 评论 -
解题报告:HDU2841 Visible Trees 莫比乌斯反演
解题报告:HDU2841 Visible Trees 莫比乌斯反演 Visible TreesTime Limit: 2000/1000 MS (Java/Others) Memory Limit: 32768/32768 K (Java/Others)Total Submission(s): 2728 Accepted Submission(s): 1191原创 2016-08-17 14:47:07 · 708 阅读 · 0 评论 -
闲聊欧拉函数入门
之前看过了欧拉数,想想还是记录一下关键部分,主要方便自己以后忘了可以查看一下,也可以帮助一些朋友学习(虽然不一定有用= =)n的欧拉(phi)数 的定义 :小于n且与n互素的整数个数。两个方法可以求解欧拉值:一 。初始化phi为n,直接从2遍历sqrt(n),当遇见素因子x时,phi = phi/x*(x-1),然后把这个因子除尽,这个式子挺好理解 :当x能整除原创 2016-05-01 10:37:17 · 438 阅读 · 0 评论 -
解题报告:Lightoj Harmonic Number 打表
Harmonic NumberTime Limit:3000MS Memory Limit:32768KB 64bit IO Format:%lld & %lluSubmit Status DescriptionIn mathematics, the nth harmonic number is the sum of the recipro原创 2016-07-20 09:33:16 · 351 阅读 · 0 评论 -
解题报告 :POJ1061 青蛙的约会 数论/扩展欧几里德模板题
青蛙的约会Time Limit: 1000MS Memory Limit: 10000KTotal Submissions: 101361 Accepted: 19545Description两只青蛙在网上相识了,它们聊得很开心,于是觉得很有必要见一面。它们很高兴地发现它们住在同一条纬度线上,于是它们约定各自朝西跳,直到碰面为原创 2016-01-30 18:56:49 · 578 阅读 · 0 评论 -
解题报告:HDU_3944 DP? 数论
DP? Time Limit: 10000/3000 MS (Java/Others) Memory Limit: 128000/128000 K (Java/Others)Total Submission(s): 2833 Accepted Submission(s): 880Problem DescriptionFigure 1 shows th原创 2016-07-18 21:02:39 · 435 阅读 · 0 评论 -
解题报告:LightOJ 1341 Aladdin and the Flying Carpet 唯一分解+DFS
Aladdin and the Flying CarpetTime Limit:3000MS Memory Limit:32768KB 64bit IO Format:%lld & %lluSubmit Status DescriptionIt's said that Aladdin had to solve seven mysteries原创 2016-07-11 20:38:08 · 368 阅读 · 0 评论 -
算法竞赛入门10.2计数与概率基础例题代码
10.6 Irrelevant Elements UVA1635思路:基础组合计数#include#include#include#includeconst int N = 1e5+5;using namespace std;long long C[N][20];int prime[20][2];inline int judge(int x,int原创 2016-05-09 01:24:48 · 845 阅读 · 0 评论 -
算法竞赛入门10.1数论初步例题代码
10.1 Colossal Fibonacci Numbers! UVA11582思路:循环节+快速幂#include#include#include#define LLu long long unsignedusing namespace std;inline int qpow(LLu x,LLu y ,int MOD){ x%=MOD; LLu原创 2016-05-09 01:03:11 · 961 阅读 · 0 评论 -
解题报告:HDU4704Sum 费马小定理+快速幂
题目:打表S的公式sum(s) = 2^(n-1)n非常大,a为2,MOD为质数,可用费马小定理进行加速,然后加速幂水过,费马做的不多,用此题记录模板。代码:#include#include#includeconst long long MOD = 1e9+7 ;const long long N = 1e5+5;using namespace原创 2016-04-21 20:51:57 · 674 阅读 · 2 评论 -
解题报告:HDU1695(欧拉+容斥)
GCDTime Limit: 6000/3000 MS (Java/Others) Memory Limit: 32768/32768 K (Java/Others)Total Submission(s): 9088 Accepted Submission(s): 3366Problem DescriptionGiven 5 integers: a, b, c,原创 2016-04-28 19:05:54 · 376 阅读 · 0 评论