数学
数学
然然zl
这个作者很懒,什么都没留下…
展开
-
博弈论题目
题目1.Nim游戏1.Nim游戏题目链接给定 n 堆石子,两位玩家轮流操作,每次操作可以从任意一堆石子中拿走任意数量的石子(可以拿完,但不能不拿),最后无法进行操作的人视为失败。问如果两人都采用最优策略,先手是否必胜。输入格式第一行包含整数 n。第二行包含 n 个数字,其中第 i 个数字表示第 i 堆石子的数量。输出格式如果先手方必胜,则输出 Yes。否则,输出 No。数据范围1≤n≤105,1≤每堆石子数≤109输入样例:22 3输出样例:Yes分析:将所有的数异或,原创 2021-08-02 11:06:30 · 179 阅读 · 0 评论 -
容斥原理题目
题目1.AcWing 890. 能被整除的数1.AcWing 890. 能被整除的数题目链接给定一个整数 n 和 m 个不同的质数 p1,p2,…,pm。请你求出 1∼n 中能被 p1,p2,…,pm 中的至少一个数整除的整数有多少个。输入格式第一行包含整数 n 和 m。第二行包含 m 个质数。输出格式输出一个整数,表示满足条件的整数的个数。数据范围1≤m≤16,1≤n,pi≤109输入样例:10 22 3输出样例:7分析:运用容氏原理,加上能被1个质数整除的个数,减去能原创 2021-08-02 10:40:41 · 285 阅读 · 0 评论 -
卡特兰数例题
例题1.满足条件的01序列1.满足条件的01序列给定 n 个 0 和 n 个 1,它们将按照某种顺序排成长度为 2n 的序列,求它们能排列成的所有序列中,能够满足任意前缀序列中 0 的个数都不少于 1 的个数的序列有多少个。输出的答案对 109+7 取模。输入格式共一行,包含整数 n。输出格式共一行,包含一个整数,表示答案。数据范围1≤n≤105输入样例:3输出样例:5答案 = C2nnn+1\frac{C_{2n}^n}{n+1}n+1C2nn因为1e9+7是质数,所以可原创 2021-07-31 21:48:17 · 273 阅读 · 0 评论 -
组合数的不同求法
(1)CabC_a^bCab = Ca−1bC_{a-1}^bCa−1b+Ca−1b−1C_{a-1}^{b-1}Ca−1b−1适合a和b数值不大的时候void init(){ for(int i=0;i<N;i++) for(int j=0;j<=i;j++) if(!j) c[i][j]=1; else c[i][j]=(c[i-1][j]+c[i-1][j-1])%mod;}(2)CabC_a^bCab=a!b!(a−b)!\frac{a!}{b!(a原创 2021-07-30 21:51:16 · 123 阅读 · 0 评论 -
高精度运算
加法和减法#include<bits/stdc++.h>using namespace std;const int N = 1e6+10;// 判断是否有 A >= B bool cmp(vector<int> A,vector<int> B){ if(A.size()!=B.size()) return A.size()>B.size(); for(int i=A.size()-1;i>=0;i--) if(A[i]!=B[i])原创 2021-07-30 16:21:08 · 82 阅读 · 0 评论 -
(异或)高斯消元
普通高斯消元#include<bits/stdc++.h>using namespace std;const int N = 110;const double eps=1e-6;int n;double a[N][N];int guass(){ int c,r; for(c=0,r=0;c<n;c++) { int t=r; for(int i=r;i<n;i++)//找到r-n行中第c列绝对值最大的行 if(fabs(a[i][c])>fa原创 2021-07-30 13:00:39 · 242 阅读 · 0 评论 -
扩展欧几里得算法
(1)扩展欧几里得算法裴蜀定理:对于任意正整数a,b,一定存在非零整数x,y,使得ax+by=gcd(a,b)/*给定 n 对正整数 ai,bi,对于每对数,求出一组 xi,yi,使其满足 ai ×xi + bi ×yi = gcd(ai,bi)。*/#include<bits/stdc++.h>using namespace std;const int N = 1e5+10;int exgcd(int a,int b,int &x,int &y){ if(!原创 2021-07-28 12:02:17 · 114 阅读 · 0 评论 -
快速幂(快速幂、快速幂求逆元)
(1)快速幂/*给定 n 组 ai,bi,pi,对于每组数据,求出 ai^bi % pi 的值。*/#include<bits/stdc++.h>using namespace std;const int N = 1e5+10;typedef long long ll;typedef unsigned long long ull;int qmi(int a,int b,int p){ int ans=1; while(b) { if(b&1) ans=(ll原创 2021-07-27 21:31:10 · 150 阅读 · 0 评论 -
欧拉函数(1-N中与N互质的个数)
欧拉函数(1-N中与N互质的数的个数,记为φ(n))(1)N=p1^a1 * p2^a2 * … pk^ak(pi为N的质因子,ai为指数),公式:φ(n)= N * (1-1/p1) * (1-1/p2) * . …*(1-1/pk)/*给定 n 个正整数 ai,请你求出每个数的欧拉函数。*/#include<bits/stdc++.h>using namespace std;const int N = 1e5+10;typedef long long ll;type原创 2021-07-27 20:27:31 · 906 阅读 · 0 评论 -
质数(判断,质因数,筛质数)
质数:在大于1的整数中,如果只包含1和本身这两个约数,就被称为质数,或者叫素数。(1)质数的判定——试除法 O(sqrt(n))bool is_prime(int n) //质数判定 { if(n<2) return false; for(int i=2;i<=n/i;i++) { if(n%i==0) return false; } return true;}(2)分解质因数——试除法 O(sqrt(n))void divide(int x) /原创 2021-07-23 14:33:23 · 111 阅读 · 0 评论 -
矩阵快速幂
#include<bits/stdc++.h>#define ll long longusing namespace std;const int N = 1e2+10;const int mod = 1e9+7;int n;struct node{ ll a[N][N];}re,b;node mul(node p,node q){ node tmp; for(int i=1;i<=n;i++) for(int j=1;j<=n;j++) tmp.a[i][原创 2021-01-18 15:37:56 · 57 阅读 · 0 评论 -
质因数分解
int x,cnt; scanf("%d",&x); for(int i=2;i*i<=x;i++) { if(x%i==0) { cnt=0; while(x%i==0) { cnt++; x=x/i; } printf("%d %d\n",i,cnt); } } if(x>1) printf("%d 1",x);原创 2020-10-22 23:01:23 · 87 阅读 · 0 评论 -
逆元
1.拓展欧几里得a,b互质,b可以不为质数void exgcd(int a,int b,int &x,int &y){ if(!b) { x=1,y=0; } else exgcd(b,a%b,y,x),y-=a/b*x;}int main(){ int x,y,a,b; cin>>a>>b; exgcd(a,b,x,y); x=(x%b+b)%b; printf("%d\n",x); return 0;}2.费马小定理,快速原创 2020-07-27 11:15:57 · 147 阅读 · 1 评论 -
欧拉筛
void ff(int n){ a[1]=1; for(int i=2;i<=n;i++) { if(!a[i]) prime[++idx]=i; for(int j=1;j<=idx;j++) { if(prime[j]*i>n) break; a[prime[j]*i]=1; if(i%prime[j]==0) break; } }}原创 2020-07-27 10:31:42 · 84 阅读 · 0 评论 -
快速幂取模
int poww(int a ,int b){ int ans=1 ; int base=a%mod; while(b) { if(b&1) ans=(ans*base)%mod; base=(base*base)%mod; b>>=1; } return ans;}原创 2020-07-22 10:26:01 · 80 阅读 · 0 评论