
数论
sedcftyv
这个作者很懒,什么都没留下…
展开
专栏收录文章
- 默认排序
- 最新发布
- 最早发布
- 最多阅读
- 最少阅读
-
欧拉降幂
原创 2020-05-24 14:16:39 · 114 阅读 · 0 评论 -
容斥原理
容斥原理 二进制位枚举遍历所有情况,时间复杂度O(2^n) for(int i=1;i<(1<<n);++i) { int mid=i,j=0; while(mid) { if(mid&1) { } ...原创 2020-04-23 15:13:49 · 183 阅读 · 0 评论 -
扩展欧几里得
扩展欧几里得 求不定方程ax+by=gcd(a,b)的解(a,b为正整数),求得特解x1,y1,通解x=x1-b/d*k,y=y1+a/d*k.当ax+by=d,且d%gcd(a,b)==0时,通解为x*d/gcd(a,b),y*d/gcd(a,b).int exgcd(int a,int b,int &x,int &y){ if(!b) { ...原创 2020-04-22 16:34:53 · 125 阅读 · 0 评论 -
欧拉定理
欧拉定理 记1-n中与n互质的数的个数,,其中a与n互质原创 2020-04-22 15:59:15 · 116 阅读 · 0 评论 -
欧拉函数
1-N中与N互质的数的个数 for(int i=0;i<n;++i) { int mid,ans,sum; scanf("%d",&sum); mid=sqrt(sum); ans=sum; for(int j=2;j<=mid;++j) { ...原创 2019-10-26 20:41:19 · 163 阅读 · 0 评论 -
分解质因数+唯一分解定理+所有因数之和
唯一分解定理:任何一个大于1的自然数N,如果N不为质数,那么N可以唯一分解成有限个质数的乘积这里P1<P2<P3......<Pn均为质数,其中指数ai是正整数。求所有因数之和:,其中分解质因数,一个数n的质因数只能全部小于等于sqrt(n),或者只有一个大于sqrt(n) map<int,long long>q; fo...原创 2019-10-26 09:46:09 · 1193 阅读 · 0 评论 -
高精度加法(组合数+压位)
const int mod=1000000000;//压9位int c[520][520][32],ans[256];void Add(int x[],int y[],int z[])//x=y+z;{ if(y[0]<z[0]) { int *t; t=z; z=y; y=t; } in...原创 2019-10-25 20:45:52 · 313 阅读 · 0 评论 -
P2261 余数求和(整除分块)
1.其中i从1增加到n为等差数列, 的值随i的增加具有阶梯性(下降),故可将其分为一个一个台阶进行计算。即整除分块对于一个 ,值与其相同的最后一个 有 ,利用该性质对每个台阶左端点可求出台阶右端点。2.对于每个台阶,相同,i的值为等差数列,设l,r分别为台阶左、右端点。每个台阶的值 :3.ans=n*k-所有台阶的值之和。注意判断的情况,以及台阶右端点不能大于...原创 2019-10-20 14:39:55 · 177 阅读 · 0 评论 -
逆元
费马小定理如果p是素数,ll pow(ll x,int y){ int b=1; while(y) { if(y&1) b=(b*x)%mod; x=x*x%mod; y>>=1; } return b;}mid=Pow(mid,mod-2);求阶乘逆元...原创 2019-10-18 23:20:39 · 191 阅读 · 0 评论 -
高精度快速幂(乘法)
取后500位struct node{ int n[516],l;};node mul(node &a,node &b){ node c; memset(c.n,0,sizeof(c.n)); for(int i=1;i<=b.l;++i) for(int j=1;j<=a.l;++j) { ...原创 2019-10-12 09:24:16 · 273 阅读 · 0 评论 -
矩阵快速幂
struct Mat{ ll m[8][8];}mat;Mat mul(Mat &a,Mat &b){ Mat c; c.m[1][1]=c.m[1][2]=c.m[2][1]=c.m[2][2]=0; for(int i=1;i<=2;++i) for(int j=1;j<=2;++j) for...原创 2019-10-11 21:05:41 · 76 阅读 · 0 评论 -
斐波那契数列求GCD
原创 2019-10-11 20:02:12 · 529 阅读 · 0 评论 -
求组合数
c[1][1]=c[0][1]=1; for(int i=2;i<=k;++i) for(int j=0;j<=min(i,n);++j) { if(!j) c[j][i]=1; else c[j][i]=c[j-1][i-1]+c[j][i-1]; }原创 2019-10-11 17:29:10 · 90 阅读 · 0 评论 -
高精度gcd(P2152 SuperGCD)
更相损减法 初始化r=0,求gcd(a,b): a!=b时,如果a、b都为偶数,a、b都除以2,r++;如果其中一个为偶数,偶数除以2;如果两个都为奇数,大数减去小数。#include<iostream>#include<cstdio>#include<cstring>#include<algorithm>using n...原创 2019-10-06 17:02:16 · 445 阅读 · 0 评论 -
欧拉筛
bool vis[1000010]; int prime[1000010]; int con=0; memset(vis,0,sizeof(vis)); for(int i=2;i<1000000;++i) { if(!vis[i]) prime[con++]=i; for(int j=0;j&...原创 2019-09-15 10:25:23 · 120 阅读 · 0 评论 -
素数检测(Miller-Rabin方法)
Miller-Rabin方法 Miller-Rabin方法是一种随机化算法,设n为待检验的整数;k为选取a的次数。重复k次计算,每次在[1,n-1]范围内随机选取一个a,若a^(n-1) modn!=1 ,则n为合数;若随机选取的k个a都使a^(n-1)≡1 (mod n)成立,则返回n为素数或伪素数的信息。 对于32位内的任一个整数n,如果其通过了以2,7,...原创 2019-08-31 23:40:41 · 2049 阅读 · 0 评论