标签:辗转相除法 快速幂 精准 方便 logs for class 约数 color
欧几里得辗转相除法求最大公约数 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; }
求精准阶乘(数据大可以分段求)
标签:辗转相除法 快速幂 精准 方便 logs for class 约数 color
原文地址:http://www.cnblogs.com/joeylee97/p/6656604.html