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

数学上用到的一些小模版

时间:2015-03-12 18:32:57      阅读:99      评论:0      收藏:0      [点我收藏+]

标签:

欧几里得求公约数:

int gcd(int a, int b)
{
    while (b)
    {
        int tmp = b;
        b = a % b;
        a = tmp;
    }
    return a;
}

 筛选法求素数:

int prime()
{
    memset(vis, true, sizeof(vis));
    for(int i = 2; i <= sqrt(N +0.5); i++)
        if(vis[i])
            for(int j = i << 1 ; j <= N; j += i)
                vis[j] = false;
    int k=0;
    for(int i = 2 ; i <= N; i++)
        if(vis[i])
            pri[k++]=i;
}

杨辉三角求组合数:
方法1:

memset(c,0,sizeof(c));
c[0]=1;
repu(i,1,sum+1)
c[i]=c[i-1]*(sum-i+1)/i;

 

方法2:

memset(c,0,sizeof(c));
for(int i=1;i<=n;i++)
{
    c[i][0]=1;
    for(int j=1;j<i;j++)
        c[i][j]=c[i-1][j-1]+c[i-1][j];
}

求欧拉数

mem(phi,0);
    phi[1]=1;
    for(int i=2; i<=N; i++)
    {
        if(!phi[i])
        {
            for(int j=i; j<=N; j+=i)
            {
                if(!phi[j])
                    phi[j]=j;
                phi[j]=phi[j]/i*(i-1);
            }
        }
    }

快速幂取模

ll pow_mod(ll x, ll y)
{
    ll ans = 1;
    while (y > 0)
    {
        if (y & 1)
            ans = ans * x % mod;
        y >>= 1;
        x = x * x % mod;
    }
    return ans;
}

 统计数字模板:

void count_digits(int s,int ans[],int times=1)
{
    int i,d,p;
    if (s <= 0)
        return ;
    d = s % 10;
    p = s / 10;
    for (i = 1; i <= d; i ++)
        ans[i] += times;
    while(p > 0)
    {
        ans[p % 10] += (d + 1) * times;
        p = p / 10;
    }
    for (i = 0; i <= 9; i ++)
        ans[i] += times * (s / 10);
    times *= 10;
    count_digits((s / 10)-1,ans,times);
    return ;
}

 分解质因子:

void tran(int n,int a[])
{
    repu(j,2,n+1)
    {
        int k=j;
        for(int i=0; i<1229; i++)
        {
            while(k%pri[i]==0)
            {
                k/=pri[i];
                a[i]++;
            }
            if(k==1)
                break;
        }
    }
}

 

数学上用到的一些小模版

标签:

原文地址:http://www.cnblogs.com/ACMERY/p/4332863.html

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