
数论
巴扎嘿呀
学习知识图谱中~欢迎交流
展开
-
B - Chessboard (组合数)
//1<=b<=a<=1e5 ,Cab mod (1e9+7)#include <iostream>#include <algorithm>#define ll long long using namespace std;const int N=1000010,mod=1e9+7;int fact[N],infact[N];int qmi(int a,int b,int m){ int ans=1; while(b) { .原创 2020-10-02 19:27:48 · 474 阅读 · 0 评论 -
组合数(模板)
//1<=b<=a<=1e5 ,Cab mod (1e9+7)#include <iostream>#include <algorithm>#define ll long long using namespace std;const int N=100010,mod=1e9+7;int fact[N],infact[N];int qmi(int a,int b,int m){ int ans=1; while(b) { .原创 2020-09-27 02:18:39 · 123 阅读 · 0 评论 -
逆元(模板)
乘法逆元的定义①当m为质数时,可以用快速幂求逆元:a / b ≡ a * x (mod m)两边同乘b可得 a ≡ a * b * x (mod m)即 1 ≡ b * x (mod m)同 b * x ≡ 1 (mod m)由费马小定理可知,当m为质数时b ^ (m- 1) ≡ 1 (mod m)拆一个b出来可得 b * b ^ (m- 2) ≡ 1 (mod m)故当n为质数时,b的乘法逆元 x = b ^ (m- 2)②当m不是质数时,可以用扩展欧几里得算法求逆元:...原创 2020-09-26 00:35:28 · 509 阅读 · 1 评论 -
扩展欧几里得(模板)
// 求x, y,使得ax + by = gcd(a, b)int exgcd(int a,int b,int &x,int &y){ if(!b) { x=1;y=0; return a; } int d=exgcd(b,a%b,y,x); y-=(a/b)*x; return d;}原创 2020-09-26 00:21:06 · 68 阅读 · 0 评论 -
快速幂(模板)
//求 m^k mod p,时间复杂度 O(logk)。int qp(int m,int k,int p){ int res=1%p,t=m; while(k) { if(k&1) res=res*t%p; t=t*t%p; k>>=1; } return res;}原创 2020-09-26 00:14:19 · 67 阅读 · 0 评论 -
欧拉函数(模板)
欧拉函数的定义//求单个数的欧拉函数 int phi(int x){ int res=x; for(int i=2;i<=x/i;i++) if(x%i==0) { res=res/i*(i-1); while(x%i==0) x/=i; } if(x>1) res=res/x*(x-1); return res;}//筛法求欧拉函数 i..原创 2020-09-26 00:11:15 · 161 阅读 · 1 评论 -
欧拉筛(模板)
//线性筛--欧拉筛 复杂度O(n)int primes[N], cnt; // primes[]存储所有素数bool st[N]; // st[]存储x是否被筛掉void get_primes(int n){ for(int i=2;i<=n;i++ ) { if(!st[i]) primes[cnt++]=i; for(int j=0;primes[j]<=n/i;j++) { ...原创 2020-09-26 00:02:51 · 202 阅读 · 0 评论 -
分解质因数(模板)
void divide(int x){ for(int i=2;i<=x/i;i++) if(x%i==0) { int s=0; while(x%i==0) x/=i,s++; cout<<i<<' '<<s<<endl;//i的s次方 } if (x>1) cout<<x<<' '.原创 2020-09-24 18:43:15 · 138 阅读 · 0 评论