zoukankan      html  css  js  c++  java
  • P1313 计算系数

    //Pro:NOIP 2011 P1313 计算系数
    
    //可以用杨辉三角来推
    //但是,在这儿给出一个比较麻烦的解法:) 
    //锻炼数学技巧233 
    //sol:
    //由二项式定理推出系数,当然了暴力乘的话肯定会炸的,而且不能取模 
    //所以,把分子和分母上的数存下来,进行质因数分解约分
    //质因数分解的话,先筛个素数 
    //然后再做除法 
    //然后让系数乘上x的系数a的n次方再乘上y的系数b的m次方
    //快速幂搞 
    
    #include<iostream>
    #include<cmath>
    #include<cstdio>
    #include<algorithm>
    using namespace std;
    
    const int N=1e3+5;
    const int mod=10007;
    
    int a,b,k,n,m;
    bool flag;
    
    bool nprime[N];
    int prime[N],cnt;
    void init()
    {
        nprime[1]=1;
        for(int i=2;i<N;++i)
        {
            if(!nprime[i])
                prime[++cnt]=i;
            for(int j=1,d;j<=cnt&&(d=prime[j]*i)<N;++j)
            {
                nprime[d]=1;
                if(i%prime[j]==0)
                    break;
            }
        }
    }
    
    int p[2][N];
    
    void fenjie(int num,int id)
    {
        for(int i=1;i<=cnt&&num!=1;++i)
        {
            while(num%prime[i]==0)
            {
                ++p[id][prime[i]];
                num/=prime[i];
            }
        }
        if(num!=1)
            ++p[id][num];
    }
    
    long long ksm(long long x,int k)
    {
        long long res=1;
        while(k)
        {
            if(k&1)
            {
                (res*=1ll*x)%=mod;
            }
            x*=x,x%=mod;
            k>>=1;
        }
        return res;
    }
    
    long long fenmu;
    
    int main()
    {
        init();
        scanf("%d%d%d%d%d",&a,&b,&k,&n,&m);
        if(n>m)
        {
            swap(n,m);
            flag=1;
        }
        for(int i=m+1;i<=k;++i)
            fenjie(i,0);
        for(int i=2;i<=n;++i)
            fenjie(i,1);
        for(int i=2;i<=k;++i)
        {
            p[0][i]-=p[1][i];
        }
        fenmu=1;
        for(int i=2;i<=k;++i)
        {
            if(p[0][i])
            {
                (fenmu*=ksm(i,p[0][i]))%=mod;
            }
        }
        if(flag)
            swap(n,m);
        (fenmu*=ksm(a,n))%=mod;
        (fenmu*=ksm(b,m))%=mod;
        printf("%lld",fenmu);
        return 0;
    }
  • 相关阅读:
    Zookeeper 基础知识【1】
    Spark 基础复习【1】
    ZooKeeper 入门 一致性
    Hive 视图 索引
    Yarn调度 历史与基础
    mysql 优化【1】
    TCP IP知识梳理
    Java 基础 锁
    Spark 累加器使用
    RATE-MAX----beta答辩博客
  • 原文地址:https://www.cnblogs.com/lovewhy/p/9633577.html
Copyright © 2011-2022 走看看