zoukankan      html  css  js  c++  java
  • 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;
    }
    求精准阶乘(数据大可以分段求)

  • 相关阅读:
    CentOS VPS
    Make 命令教程
    Nginx 学习
    字体对齐问题
    postman curl
    linux命令
    服务器
    操作系统
    nginx-1.15遇到无法加载php文件报404的问题
    thinkphp6.0框架下载与安装
  • 原文地址:https://www.cnblogs.com/joeylee97/p/6656604.html
Copyright © 2011-2022 走看看