
数论
文章平均质量分 73
chp的博客
这个作者很懒,什么都没留下…
展开
-
Row GCD(差分+辗转相减法)
这道题和上面的例题差不多,只是在最后需要通过判断q[0]的值来确定x的值。还有一道难一些的题,用到了树状数组。这道题用到了差分和辗转相减法,,因此我们只需要提前求出。根据辗转相减法可得到。原创 2021-01-12 19:43:24 · 1270 阅读 · 6 评论 -
AcWing 97. 约数之和—算数基本定理、递归
是否是mod的倍数,这种情况就比较麻烦,如果题目比较友好,直接用公式+需要通过算数基本定理来解决问题,任何正整数。会超时,所有这里考虑用递归分治的方法来算。可以发现后一半每一项都是前一项对应位置的。为奇数,我们把这个写成整除的形式就是。就变成了奇数项,可以按照(1)来求,质因子分解,将质因子的指数再乘上。其实之前考虑的是用等比数列的公式。那么现在的问题就变成了如何快速求。一共有a_n+1,为偶数项,很大,考虑用递归分治来做,和逆元来算,但是需要判断。,但是有个问题,这里的。的范围较大,如果遍历算。原创 2023-07-04 15:33:21 · 176 阅读 · 0 评论 -
高斯消元法解线性方程组
【代码】高斯消元法解线性方程组。原创 2023-06-21 13:29:20 · 265 阅读 · 0 评论 -
逆元(费马小定理、扩展欧几里得、逆元线性打表)
当p为质数时,且a不为p的倍数(a,p一定互质),那么可以用费马小定理来求解,费马小定理指出。当p不为质数,但是a,p互质时(不互质逆元不存在),可以根据欧拉定理来求逆元,欧拉定理是对。(a - b) % p = (a%p - b%p) %p (对)(a / b) % p = (a%p / b%p) %p (错)(a * b) % p = (a%p * b%p) %p (对)(a + b) % p = (a%p + b%p) %p (对)原创 2023-06-14 14:49:29 · 1552 阅读 · 0 评论 -
线性筛法求欧拉函数
的,大概率是过不了上面的问题,这里我们考虑用线性筛来求欧拉函数。如果用筛质数的方法,单独求某个数的欧拉函数,时间复杂度应该是。关于线性筛可以看我的。原创 2023-06-05 19:31:26 · 107 阅读 · 0 评论 -
牛客15476-组合数问题2
题目链接分析:题意为给定n,k,选择k个CabC_a^bCab(0<=a<n,0<=b<=a),使它们的和最大,也就是选择前k个大的CabC_a^bCab,通过组合数可以看到,CaiC_a^iCai(0<=i<=a)是先递增,再递减的,所以在选数时,应该从中间向两边选择具体做法是先将中间的数存放在优先队列中,每次最大数出队时,向将两边数入队(若出队数在中间,将两边的数入队;若出队数在右边,将右边的数入队;若出队数在左边,将左边的数入队)。存每个数大原创 2021-01-29 12:59:22 · 200 阅读 · 0 评论 -
牛客16429-组合数问题
题目链接题目描述分析: 这道题是一道组合数解决的题,数据范围较小,可以通过递推公式Cab=Ca−1b∗Ca−1b−1C_a^b=C_{a-1}^b*C_{a-1}^{b-1}Cab=Ca−1b∗Ca−1b−1来提前记录好所有组合数。跟这道题类似,因为这道题是求整除k的数,因此在存组合数时,只存对k取余后的余数即可,余数为0即为整除k的组合数。并且用前缀和数组保存好前缀和即可。原创 2021-01-27 23:19:14 · 194 阅读 · 0 评论 -
满足条件的01序列
题目连接给定n个0和n个1,它们将按照某种顺序排成长度为2n的序列,求它们能排列成的所有序列中,能够满足任意前缀序列中0的个数都不少于1的个数的序列有多少个。输出的答案对1e9+7取模。输入格式共一行,包含整数n。输出格式共一行,包含一个整数,表示答案。数据范围1≤n≤105输入样例:3输出样例:5分析:这道题题意较为容易理解,计算满足任意前缀0的次数不小于1的序列个数,将这个问题转化为组合数问题就是在2n步骤中选择满足条件的n步来计算数量,那么总的序列个数就是C2nn原创 2021-01-26 20:54:30 · 1112 阅读 · 0 评论 -
组合数学模板题
题目链接给定n组询问,每组询问给定两个整数a,b,请你输出Cba mod (109+7)的值。输入格式第一行包含整数n。接下来n行,每行包含一组a和b。输出格式共n行,每行输出一个询问的解。数据范围1≤n≤10000,1≤b≤a≤2000输入样例:33 15 32 2输出样例:3101分析:这道题的数据范围较小,而且是多组输入,可以打表,将所有CabC_a^bCab都预处理出来,处理过程运用求组合数的递推公式Cab=Ca−1b+Ca−1b−1C_a^b=C原创 2021-01-26 16:08:48 · 372 阅读 · 0 评论 -
扩展欧几里得算法
我们通过上面的模板可以求解出 ax+by=gcd(a,b)的一个特解 x y 然后等式俩边同时乘以m/gcd(a,b) 那么是不是就变成了ax+by=m的式子 ,此时的x和y也是乘过m/gcd(a,b)的,即此时x y是ax+by=m 的一个特解。然后就是这个方程如果没有对x和y有范围上的要求的话是有无线的解的。学习扩展欧几里得算法,我们得先知道欧几里得算法,可以看。而扩展欧几里得算法相当于是欧几里得算法的逆过程,的最小公倍数 然后又减去一个最小公倍数。具体的求法是在欧几里得的求法中回溯。原创 2020-12-02 17:18:24 · 424 阅读 · 0 评论 -
最大公约数(欧几里得算法)
欧几里得算法又称辗转相除法,是指用于计算两个非负整数a,b的最大公约数。应用领域有数学和计算机两个方面。计算公式gcd(a,b) = gcd(b,a mod b)。该算法通过递归来实现,直至a%b==0。模板题:#include<cstdio>#include<algorithm>#include<cstring>using namespace std;int gcd(int a,int b){ return b?gcd(b,a%b):a;}i原创 2020-11-26 19:41:17 · 382 阅读 · 0 评论 -
前缀和与差分
前缀和是数组下标之前(包括此项元素)的所有数组元素之和。前缀和一维前缀和b[i]=∑j=0ia[j]b[ i ]=\sum_{j=0}^i a[ j ]b[i]=∑j=0ia[j] ,b[i]=b[i−1]+a[i]b[ i ]=b[ i-1 ]+a[ i ]b[i]=b[i−1]+a[i]二维前缀和b[x][y]=∑i=0x∑j=0ya[i][j]b[ x ][ y ]=\sum_{i=0}^x \sum_{j=0}^ya[ i ][ j ]b[x][y]=i=0∑xj=0∑ya[i][j]原创 2020-10-28 09:16:42 · 125 阅读 · 0 评论 -
约数的个数与和(基本算数定理求解)
目录基本算数定理原理由算数基本定理而来的重要推论:[acwing 870. 约数个数](https://www.acwing.com/problem/content/872/)基本算数定理在求解之前,我们先来了解一下基本算数定理。原理算术基本定理可表述为:任何一个大于1的自然数 N,如果N不为质数,那么N可以唯一分解成有限个质数的乘积N=P1a1∗P2a2∗P3a3∗......∗PnanN=P_1^{a1}*P_2^{a2}*P_3{a3}*......*P_n^{an}N=P1a1∗P2a2原创 2020-10-27 19:24:44 · 1082 阅读 · 0 评论 -
线性筛模板
线性筛模板#include<cstdio>#include<cstring>#include<algorithm>#include<iostream>using namespace std;const int N=1e6+10;int q[N];bool f[N];int cnt=0;void abc(int x){ for(int i=2;i<=x;i++) { if(!f[i]) q[cnt++]原创 2020-10-26 20:35:31 · 167 阅读 · 0 评论 -
acwing 二分&前缀和
acwing 789. 数的范围 #include<cstdio>#include<iostream>#include<cstring>#include<algorithm>using namespace std;const int maxn=1e5+10;int n,q;int s[maxn];int main(){ ...原创 2020-05-09 22:38:25 · 268 阅读 · 0 评论 -
acwing 1230K倍区间
K倍前缀和题意:给定数组与常数k,判断有多少个区间满足a[l~r]的和是k的倍数。分析:暴力遍历时间复杂度为O(n^3)肯定会超时,利用前缀和进行优化后时间复杂度为O(n^2),也是通过不了。计算前缀和 (s[r]-s[l-1])%k==0 s[r]%k==s[l-1]%k,这样就有了解题的思路。#include<cstdio>#include<cstri...原创 2020-02-04 22:59:29 · 155 阅读 · 0 评论 -
Odd Sum Segments CodeForces - 1196B
题目传送门分析:题目意思是给你n个数,判断能否分为k份且每份的和为奇数;如果不能分 output NO;能分的话 output YES , 并且输出每个区间右端分法为 [1,r1] , [r1+1;r2] , [r2+1,r3] ,…, [rk−1+1,n],需要注意的是最后一个一定是n;讨论如何分,奇数相加为偶数,所以我需要保证每个区间最少一个奇数,就让每个区间只有一个奇数,那么剩...原创 2019-11-20 19:44:35 · 171 阅读 · 0 评论 -
hdu 6576--Worker
题目链接题意比较容易理解,不解释了。会的两种解法(1)找所有工厂效率的最小公倍数,再以最小公倍数除以时间的和作为最少人数,看m是否为最小人数整数倍即可代码如下:#include<stdio.h>#include<algorithm>#include<cstring>using namespace std;typedef long l...原创 2019-11-16 21:03:06 · 339 阅读 · 0 评论