数论
#
夕林山寸
这个作者很懒,什么都没留下…
展开
-
二次剩余、威尔逊定理 简单记下结论
https://blog.csdn.net/stevensonson/article/details/85845334 https://www.cnblogs.com/bztMinamoto/p/10664973.html 直接记结论。(管你看没看懂,记就完事了) 什么是二次剩余: 如果存在一个整数x,使得,那么称n在模p意义是二次剩余。 怎么判断一个数n在模p意义下是不是二次剩余? 勒让德符号: 一些定理 p的二次剩余和二次非剩余的个数均为(不考虑0)的情况下 怎么求..原创 2020-07-22 20:24:31 · 250 阅读 · 0 评论 -
利用埃筛 求1-n中的莫比乌斯函数值
#include <bits/stdc++.h> using namespace std; typedef long long ll; const int M = 1e5+7; int miu[M],vs[M]; void pre() { int n=1e5; for(int i=1;i<=n;i++)miu[i]=1,vs[i]=0; for(int i=2;i<...原创 2020-04-17 12:13:57 · 227 阅读 · 0 评论 -
算法竞赛——进阶指南——acwing213. 古代猪文 lucas定理+欧拉定理+中国剩余定理,巧妙的性质!
一道很考验数论基本功的题目,知识杂糅。 首先指数取模一般用欧拉定理降维(利用指数循环节) 而这必须满足q与mod互质, 由于mod是质数,当q==mod时,结果为0,否则q与mod互质 则可用欧拉定理的推论得到: 然后只需处理质数部分即可。 大数的组合数用lucas定理求。 但由于求多次,且模数太大,阶乘的复杂度过高,不可直接求。 我们分解999911659发现:其有4个质因子...原创 2020-04-14 19:37:59 · 246 阅读 · 1 评论 -
Codeforces Round #630 (Div. 2) E - Height All the Same
我们可以让一个块+2,或让两个相邻的块都+1。 显然,如果初始状态与目标状态的奇偶性相同一定可行。 所以当n*m为奇数,初态奇偶状态是什么都可,(因为末态有奇数有偶数),这个直接快速幂即可 当n*m是偶数时,初始状态必须时偶数,因为末态只有偶数 然后就求出n*m个数,每个数取值L-R,和是偶数的方案: 第一种方法:线性dp+矩阵快速幂加速 dp[i][j]表示选了i个数,和为:偶数/奇...原创 2020-04-01 13:29:09 · 172 阅读 · 0 评论 -
Libre oj #161. 乘法逆元 2 \ P5431 【模板】乘法逆元2
核心是任意n个数取模,可以用模数的性质,在O(N+logp)的复杂度求出 libre oj //#include <bits/stdc++.h> #include<iostream> #include<cmath> #include<cstdio> #include<map> #include<set> #include...原创 2020-03-25 11:54:29 · 421 阅读 · 0 评论 -
算法竞赛——进阶指南——POJ1830 异或方程组求解—— (解答为何这道题 的 异或方程组组可以高斯消元)
搞了半天才明白为什么异或方程组求解可以直接套高斯消元。。 看了往上bolg几乎都没有提这点。。(我感觉这地方才是最难的) 其实异或方程组求解直接套高斯消元是有条件的:未知数必须是2的次幂(0,1,2,4,这种) 只有这样才满足 a*x ^ b*x == (a ^ b ) * x ;这样两个方程就可以异或消去未知数了。 ...原创 2020-03-17 18:42:52 · 387 阅读 · 1 评论 -
算法竞赛——进阶指南——acwing207. 球形空间产生器 高斯消元应用
n维球体的通式: (x1-a1)^2 +(x2-a2)^2 + …… +(xn-an)^2 =R ^ 2 球心坐标就是(a1,a2,……,an) 给出n+1个坐标,均带入,发现不好解,因为是二次方程,而且R^2是未知数 由于所有方程右边都是R^2 我们可以两两联立方程,消去一次 变成多元一次方程 用高斯消元搞搞就行。 例如: (x11-a1)^2 +(x12-a2)^2 + ...原创 2020-03-13 17:46:13 · 146 阅读 · 0 评论 -
P3389 【模板】高斯消元法 常规写法+约旦消元
把方程化简成 简化梯形矩阵 然后回带即可 #include<bits/stdc++.h> using namespace std; const int M=100+7; double mp[M][M]; double ans[M]; double eps=1e-7; int main() { int n; scanf("%d",&n); for(int i=1;i...原创 2020-03-11 12:27:26 · 151 阅读 · 0 评论 -
算法竞赛——进阶指南——acwing205. 斐波那契 矩阵快速幂
利用了矩阵结合律,先算出构造递推矩阵自乘的结果,再与初始矩阵相乘。 #include <bits/stdc++.h> using namespace std; typedef long long ll; #define ls (o<<1) #define rs (o<<1|1) #define pb push_back //#define a(i,j) a[...原创 2020-03-06 10:51:03 · 1507 阅读 · 0 评论 -
P2485 [SDOI2011]计算器 取模三大基础模板
手敲了这题,差不多入门同余了 #include <bits/stdc++.h> using namespace std; typedef long long ll; #define ls (o<<1) #define rs (o<<1|1) #define pb push_back //#define a(i,j) a[(i)*(m+2)+(j)] ...原创 2020-03-02 20:54:43 · 338 阅读 · 0 评论 -
bsgs 算法 求高次同余 方程 a^x %p = b 的形式
利用指数循环节,枚举i,达到根号n的复杂度 ll qpow(int a,int b,int p) { ll ans=1; while(b) { if(b&1)ans=ans*a%p; a=a*a%p; b/=2; } return ans; } int bsgs(int a,int b,int p)// a^x \equiv b (mod p) { map&l...原创 2020-03-02 19:13:29 · 267 阅读 · 0 评论 -
算法竞赛——进阶指南——acwing203. 同余方程 拓欧模板题
拓欧模板题。 利用裴属定理解决二元一次方程。 ax+by=m 有解 充要条件是 m|gcd(a,b); #include <bits/stdc++.h> using namespace std; typedef long long ll; #define ls (o<<1) #define rs (o<<1|1) #define pb p...原创 2020-02-25 16:58:10 · 234 阅读 · 0 评论 -
POJ 1845 逆元应用
题目很简单,质因数分解,组合数搞搞,转化成等比数列。 然后逆元。 但注意:如果分母的逆元不存在时,我们就不能用等比求和公式来做。 如果p-1 不存在逆元,即 p -1 是9901的倍数,那么 1+p+p^2+p^3+……+p^c 1+1+1^2+1^3+……+1^c c+1 (mod 9901) 然后用c+1代替这一项的求和即可。 ...原创 2020-02-24 17:54:57 · 112 阅读 · 0 评论 -
算法竞赛——进阶指南——POJ3696 acwing202. 最幸运的数字 欧拉函数 指数循环节
https://www.bbsmax.com/A/x9J2xWyKd6/ 思路参考蓝书和这篇博客。 这里的qmul的意思是快速乘法,为了防止快速幂中两个1e10相乘爆LL。 然后我把sqrt(2e9)内质数预处理出来,加快速度 #include <bits/stdc++.h> using namespace std; typedef long long ll; #define...原创 2020-02-21 19:46:24 · 174 阅读 · 0 评论 -
算法竞赛——进阶指南——POJ3090 acwing201. 可见的点 欧拉筛写法
主要利用了欧拉函数的性质, https://blog.csdn.net/bjfu170203101/article/details/104404928 我这篇博客里的性质 3) 和 4)。 #include <bits/stdc++.h> using namespace std; typedef long long ll; #define ls (o<<1...原创 2020-02-20 16:50:42 · 211 阅读 · 0 评论 -
算法竞赛——进阶指南——BZ0J1053 反素数
这是个思维想结论题。 根据题目给的条件 推出一些性质,使得问题简化。 1首先根据反素数定义,我们可以得到,反素数一定是1-N中约数最多的数(如果由多个约数相同且最多的数,取最小的那个)。 证明:假设这个数是m。 我们任取x<m 肯定有g(x)<g(m) 任取x>=m ,都有g(m)>=g(x) 显然 x>=m时只有x==m符合反素数定义。则x一定是1...原创 2020-02-17 19:25:43 · 152 阅读 · 0 评论 -
BZOJ 1257: [CQOI2007]余数之和
整数分块,证明想明白了。。。 n/(n/i); 相当于 几何意义: 有一个长度为n的线段,左端点1,右端点n。 中间放y段小线段,每个小段段的长度都是x。 一个分块的含义是:当前小段的长度是l, 每小段长度要变成多少才能使得段数刚好不发生改变。 即:小段长度在l-r区间范围内,中间都能恰好放y 个小线段。(尽量放满) 取min的操作是防止r超出边界 #incl...原创 2020-02-04 13:54:54 · 103 阅读 · 0 评论 -
CH3101 阶乘分解
阶乘分解。。 每个数分解质因数 再合并 复杂度N根号N。 会T。 我第一开始做法是:求出所有1-n所有质数。 遍历1-n,一个一个分解。。。。 复杂度n^2.... 其实我们求出1-n中所有质数后。 对每个质数算出它的ci即可。 怎么算? 对于一个质数p,求它分解后的的次幂 p,p*2,p*3,……p*b //p*b<=n.这么些个数都会有p这个因子。总共下取...原创 2019-09-12 22:27:13 · 203 阅读 · 0 评论 -
Prime Distance POJ - 2689 区间筛素数
区间筛素数。 类似埃筛的思想。 直接求1-R所有质数,打不下。 由于一个合数N,一定有一个不超过根号N的质因子。 所以我们只要用筛法求出 1 --- 根号R 的质数。 然后类比埃筛,标记L-R之间合数。//注意1不是质数。 然后把质数取出,求相邻质数差最大最小即可。 //KX //#include <bits/stdc++.h> #include<cstdio&...原创 2019-09-12 21:55:27 · 158 阅读 · 0 评论