随笔分类 - ACM-数论
摘要:复杂度n0.75/logn,实际上比n2/3的杜教筛要快一些。 1 //#include <bits/stdc++.h> 2 #include<cstdio> 3 #include<cstring> 4 #include<algorithm> 5 #include<iostream> 6 #incl
阅读全文
摘要:加了蝴蝶变换优化的快速傅里叶变换。 1 #include<iostream> 2 #include<cstdio> 3 #include<cmath> 4 using namespace std; 5 const int MAXN=1e7+10; 6 inline int read() 7 { 8
阅读全文
摘要:板子记录。 1 #include<bits/stdc++.h> 2 #define ll long long 3 #define scan(i) scanf("%d",&i) 4 #define scand(i) scanf("%lf",&i) 5 #define scanl(i) scanf("%
阅读全文
摘要:1 #include<iostream> 2 #include<string> 3 #include<cstdio> 4 typedef long long ll; 5 using namespace std; 6 const int maxn=100000+5; 7 int n; 8 ll ai[
阅读全文
摘要:如今我才知道欧拉筛和欧拉函数之间的关系。之前我欧拉函数离线打表一直是n²,亏我一直不T。 先放个纯欧拉筛。prime[1~cnt]记录了cnt个素数,而vis[i]=false表示这个数是素数。 1 const int MAXN=3000001; 2 int prime[MAXN];//保存已经求出
阅读全文
摘要:二次剩余+快速幂+离线阶乘逆元。朝鲜人的考古题,快速幂年年有,啥时候把这题改成光速幂版本,又能卡死一群。 向金日成综合大学的巨巨们低头。 1 #include<cstdio> 2 #include<cstdlib> 3 #include<algorithm> 4 using namespace st
阅读全文
摘要:卡特兰数,一个常常出现在排列组合公式中的数列。 第n个卡特兰数Cn满足以下递推关系: 其实际应用的实际问题有: 1. 在圆上选择2n个点,将这些点成对连接起来使得所得到的n条线段不相交的方法数?(Cn) 2. 将一个凸多边形区域分成三角形区域(划分线不交叉)的方法数? 3. 一个栈的进栈序列为1,2
阅读全文
摘要:威尔逊定理:对任意质数p,有(p-1)!≡-1(mod p); 若有(p-1)!≡-1(mod p),则必有p是素数。 异或和定理:令f(n)表示从1到n的异或和,则: 若n≡0(mod4),f(0,n)=n, 若n≡1(mod4),f(0,n)=1, 若n≡2(mod4),f(0,n)=n+1,
阅读全文
摘要:定理1:n(p-1)/2≡±1(mod p),p是奇素数。 定理2:给出方程 x2≡n(mod p),其中p是奇素数,则方程有解当且仅当n(p-1)/2≡1(mod p)。 定理3:若方程 x2≡w(mod p),其中p是奇素数无解,设a满足a2=w+n,则(a+sqrt(w))p+1≡n(mod
阅读全文
摘要:Lucas定理用于求C(n,m)%p,(p为质数),而拓展Lucas定理中,p不一定为质数。 Lucas定理有两种形式,在线算法和离线打表,在线算法适用于p经常改变 或 查询次数较少 的情况,其他情况下用离线打表。 首先是一个在线算法。 1 ll pow(ll a, ll b, ll m) 2 {
阅读全文
摘要:拓展和非拓展的中国剩余定理的区别在于同余方程组的mod是否两两互质,没有本质区别(个鬼)。 首先用拓展中国剩余定理是完全可以ac中国剩余定理的板题的,但是性能上会差很多,不过应该不会卡这个常数的吧(大雾) 中国剩余定理是很简单的,用拓展欧几里得的板子,加上下面的原理: 很容易出代码,在这里不写了,您
阅读全文
摘要:简单的来说,已知a和m,求a的逆元(如果存在的话等于1/a mod m)。 现分几种情况讨论。 1. m是素数(a<m)。 a的逆元必然存在。两种方法求逆元,在线用拓展欧几里得算,打表用递推。 不用费马小定理在线算逆元是因为拓展欧几里得复杂度O(logn),费马小定理复杂度O(log mod),后者
阅读全文
摘要:我真是醉了,快速幂和矩阵快速幂都T飞了,竟然还有光速幂和矩阵光速幂。 下面给个光速幂和矩阵光速幂板子,原创的。感觉这个思路有银牌题水准,好想感受一下金牌的手感呀(每日幻想) 既然名字叫光速幂,肯定是很快的。 快速幂复杂度O(Tlogn),T是查询次数,n是幂次数; 光速幂复杂度O(T+sqrt(m)
阅读全文
摘要:1 #include<bits/stdc++.h> 2 #define ll long long 3 #define scan(i) scanf("%d",&i) 4 #define scand(i) scanf("%lf",&i) 5 #define scanl(i) scanf("%lld",&
阅读全文
摘要:1 const int N=1e7; 2 int phi[N+10],prime[N+10],tot,ans; 3 bool mark[N+10]; 4 void getphi() { 5 int i,j; 6 phi[1]=1; 7 for(i=2;i<=N;i++){ 8 if(!mark[i]
阅读全文
摘要:1 #include<bits/stdc++.h> 2 #define ll long long 3 #define scan(i) scanf("%d",&i) 4 #define scand(i) scanf("%lf",&i) 5 #define scanl(i) scanf("%lld",&
阅读全文

浙公网安备 33010602011771号