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

    https://www.luogu.org/problem/show?pid=1313
    这里写图片描述

    系数应该是a^n*b^m*c(n,m),主要是求c(n,m)
    c(n,m)=n!/m!*(n-m)!
    法1:
    分解质因子

    #include<cstdio>
    #include<iostream>
    int su[20000],yz[20000];
    int n,m,k,a,b;
    int p=10007;
    void fen1(int q)
    {
        int x=2;
        while(q>1)
        {
            while(q%x==0)
            {
                yz[x]++;
                q/=x;
            }
            x++;
        }   
    }
    void fen2(int q)
    {
        int x=2,j=0;
        while(q>1)
        {
            while(q%x==0)
            {
                yz[x]--;
                q/=x;
            }
            x++;
        }   
    }
    
    int main()
    {
        scanf("%d%d%d%d%d",&a,&b,&k,&n,&m);
        a=a%p;
        b=b%p;
        int ans=1;
        for(int i=1;i<=n;i++)
         ans=(ans*a)%p;
        for(int i=1;i<=m;i++)
         ans=(ans*b)%p;
        for(int i=2;i<=k;i++)
         fen1(i);
        for(int i=2;i<=n;i++)
         fen2(i);
        for(int i=2;i<=k-n;i++)
         fen2(i);
        for(int i=2;i<=k;i++)
         if(yz[i]>0)
         for(int j=1;j<=yz[i];j++)//!!
         {
            ans=(ans*i)%p;
         } 
        printf("%d",ans);
        return 0; 
    
    } 

    法2:
    杨辉三角

    #include<iostream>
    #include<cstdio>
    #include<cstring>
    #include<cmath>
    #include<vector>
    #include<queue>
    #include<string>
    #include<map>
    #define LL long long
    #define mod 10007
    using namespace std;
    int a,b,k,n,m,ans;
    int yh[1001][1001];
    int fastpow(int a,int p)
    {
        int b=1;
        while(p>1)
        {
            if(p%2==1)
                b=(b*a)%mod;
            a=(a*a)%mod;
            p/=2;
        }
        return (a*b)%mod;
    }
    int main()
    {
        scanf("%d%d%d%d%d",&a,&b,&k,&n,&m);
        a%=mod;b%=mod;//!! 
        for(int i=0;i<=k;i++)
        {
            yh[i][0]=1;
            yh[i][i]=1;
        }
        for(int i=1;i<=k;i++)
        {
            for(int j=1;j<=i;j++)
            {
                yh[i][j]=(yh[i-1][j-1]+yh[i-1][j])%mod;
            }
        }
        ans=(((fastpow(a,n)*fastpow(b,m))%mod)*yh[k][n])%mod;
        printf("%d",ans);
        return 0;
    } 
  • 相关阅读:
    CFgym102394I
    Infinite Fraction Path (后缀数组)
    2016ACM/ICPC亚洲区沈阳站-重现赛
    2sat学习笔记
    bzoj4176
    bzoj3309
    6C
    3U
    3T
    3R
  • 原文地址:https://www.cnblogs.com/dfsac/p/7587930.html
Copyright © 2011-2022 走看看