首页 > 代码库 > ACM 数学
ACM 数学
欧几里得辗转相除法求最大公约数 int gcd(int a,int b) { if(b==0) return a; else return gcd(b,a%b); } 求组合数 int C(int n ,int m) { int i,a,fz=1,fm=1; for( i = 1; i <= m ;i++) { fz*=(n-i+1); fm*=i; a = gcd(fz,fm); fz/=a; fm/=a; } return fz/fm; } 错排公式 D(n) = (n-1) [D(n-2) + D(n-1)] 排公式的原形为D(n) = n! (1/0! - 1/1! + 1/2! - 1/3! - ..... + (-1)^n/n!),当n很大时计算就很不方便。一个供参考的简化后的公式是D(n) = [n!/e+0.5] ,其中e是自然对数的底,[x]为x的整数部分。 逆元 对于正整数a和m如果有 ax = 1%m 快速幂算法 #include<stdio.h> #define M 1000000007 int fp(int a,int b,int c) { long long ret=1,pow=a;//ret:返回值;pow:基底 while(b!=0) { if(b&1) ret=(ret*pow)%c; pow=(pow*pow)%c; b/=2;//相当于b>>1 } return (int)ret; }
求精准阶乘(数据大可以分段求)
ACM 数学
声明:以上内容来自用户投稿及互联网公开渠道收集整理发布,本网站不拥有所有权,未作人工编辑处理,也不承担相关法律责任,若内容有误或涉及侵权可进行投诉: 投诉/举报 工作人员会在5个工作日内联系你,一经查实,本站将立刻删除涉嫌侵权内容。