码迷,mamicode.com
首页 > 其他好文 > 详细

ACM 数学

时间:2017-04-01 16:49:05      阅读:155      评论:0      收藏:0      [点我收藏+]

标签:辗转相除法   快速幂   精准   方便   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;
}
求精准阶乘(数据大可以分段求)

 

ACM 数学

标签:辗转相除法   快速幂   精准   方便   logs   for   class   约数   color   

原文地址:http://www.cnblogs.com/joeylee97/p/6656604.html

(0)
(0)
   
举报
评论 一句话评论(0
登录后才能评论!
© 2014 mamicode.com 版权所有  联系我们:gaon5@hotmail.com
迷上了代码!