随笔分类 -  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 阅读全文
posted @ 2020-11-06 17:58 Lovaer 阅读(280) 评论(0) 推荐(0)
摘要:加了蝴蝶变换优化的快速傅里叶变换。 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 阅读全文
posted @ 2020-10-31 18:09 Lovaer 阅读(287) 评论(0) 推荐(0)
摘要:板子记录。 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("% 阅读全文
posted @ 2020-10-09 16:56 Lovaer 阅读(346) 评论(0) 推荐(0)
摘要: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[ 阅读全文
posted @ 2020-10-06 18:29 Lovaer 阅读(118) 评论(0) 推荐(0)
摘要:如今我才知道欧拉筛和欧拉函数之间的关系。之前我欧拉函数离线打表一直是n²,亏我一直不T。 先放个纯欧拉筛。prime[1~cnt]记录了cnt个素数,而vis[i]=false表示这个数是素数。 1 const int MAXN=3000001; 2 int prime[MAXN];//保存已经求出 阅读全文
posted @ 2020-08-12 15:39 Lovaer 阅读(196) 评论(0) 推荐(0)
摘要:二次剩余+快速幂+离线阶乘逆元。朝鲜人的考古题,快速幂年年有,啥时候把这题改成光速幂版本,又能卡死一群。 向金日成综合大学的巨巨们低头。 1 #include<cstdio> 2 #include<cstdlib> 3 #include<algorithm> 4 using namespace st 阅读全文
posted @ 2020-08-05 15:32 Lovaer 阅读(268) 评论(0) 推荐(0)
摘要:卡特兰数,一个常常出现在排列组合公式中的数列。 第n个卡特兰数Cn满足以下递推关系: 其实际应用的实际问题有: 1. 在圆上选择2n个点,将这些点成对连接起来使得所得到的n条线段不相交的方法数?(Cn) 2. 将一个凸多边形区域分成三角形区域(划分线不交叉)的方法数? 3. 一个栈的进栈序列为1,2 阅读全文
posted @ 2019-12-07 00:24 Lovaer 阅读(392) 评论(0) 推荐(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, 阅读全文
posted @ 2019-11-01 16:50 Lovaer 阅读(184) 评论(0) 推荐(0)
摘要:定理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 阅读全文
posted @ 2019-10-31 16:33 Lovaer 阅读(613) 评论(0) 推荐(0)
摘要:Lucas定理用于求C(n,m)%p,(p为质数),而拓展Lucas定理中,p不一定为质数。 Lucas定理有两种形式,在线算法和离线打表,在线算法适用于p经常改变 或 查询次数较少 的情况,其他情况下用离线打表。 首先是一个在线算法。 1 ll pow(ll a, ll b, ll m) 2 { 阅读全文
posted @ 2019-10-30 13:24 Lovaer 阅读(330) 评论(1) 推荐(1)
摘要:拓展和非拓展的中国剩余定理的区别在于同余方程组的mod是否两两互质,没有本质区别(个鬼)。 首先用拓展中国剩余定理是完全可以ac中国剩余定理的板题的,但是性能上会差很多,不过应该不会卡这个常数的吧(大雾) 中国剩余定理是很简单的,用拓展欧几里得的板子,加上下面的原理: 很容易出代码,在这里不写了,您 阅读全文
posted @ 2019-10-29 19:33 Lovaer 阅读(414) 评论(0) 推荐(0)
摘要:简单的来说,已知a和m,求a的逆元(如果存在的话等于1/a mod m)。 现分几种情况讨论。 1. m是素数(a<m)。 a的逆元必然存在。两种方法求逆元,在线用拓展欧几里得算,打表用递推。 不用费马小定理在线算逆元是因为拓展欧几里得复杂度O(logn),费马小定理复杂度O(log mod),后者 阅读全文
posted @ 2019-10-28 00:24 Lovaer 阅读(846) 评论(0) 推荐(1)
摘要:我真是醉了,快速幂和矩阵快速幂都T飞了,竟然还有光速幂和矩阵光速幂。 下面给个光速幂和矩阵光速幂板子,原创的。感觉这个思路有银牌题水准,好想感受一下金牌的手感呀(每日幻想) 既然名字叫光速幂,肯定是很快的。 快速幂复杂度O(Tlogn),T是查询次数,n是幂次数; 光速幂复杂度O(T+sqrt(m) 阅读全文
posted @ 2019-09-11 10:44 Lovaer 阅读(2106) 评论(0) 推荐(1)
摘要: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",& 阅读全文
posted @ 2019-08-27 21:20 Lovaer 阅读(236) 评论(1) 推荐(1)
摘要: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] 阅读全文
posted @ 2019-08-26 22:37 Lovaer 阅读(265) 评论(0) 推荐(1)
摘要: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",& 阅读全文
posted @ 2019-08-24 15:54 Lovaer 阅读(1400) 评论(0) 推荐(0)