zoukankan      html  css  js  c++  java
  • 组合数学——cf893E

    /*
    不定方程 x1+...+xy=c 的正整数解有C(y+c-1,y-1)个
    质因子分解后每种因子都独立算贡献,再相乘
    最后因为可以随意加偶数个-1,所以再乘2^y-1 
    */
    #include<bits/stdc++.h>
    using namespace std;
    #define ll long long 
    #define mod 1000000007
    #define N 2000006
    
    ll F[N],invf[N],inv[N],p2[N];
    int vis[N],prime[N],m;
    void init(){
        for(int i=2;i<N;i++){
            if(!vis[i])
                prime[++m]=i;
            for(int j=1;j<=m;j++){
                if(prime[j]*i>=N)break;
                vis[prime[j]*i]=1;
                if(i%prime[j])break;
            }
        }
    }
    
    int mm,p[500],c[500];
    void divide(int x){
        memset(c,0,sizeof c);
        mm=0;
        for(int i=1;prime[i]*prime[i]<=m;i++)
            if(x%prime[i]==0){
                p[++mm]=prime[i];
                while(x%prime[i]==0)
                    x/=prime[i],c[mm]++;            
            }
        if(x>1){
            p[++mm]=x;
            c[mm]=1;
        }
    }
    inline ll C(ll a,ll b){
        if(a<b)return 0;
        return F[a]*invf[b]%mod*invf[a-b]%mod;
    } 
    
    int x,y,q;
    int main(){
        init();
        F[0]=1;invf[0]=1;inv[1]=1;p2[0]=1;
        for(int i=2;i<=2000000;i++)inv[i]=(mod-mod/i)*inv[mod%i]%mod;
        for(int i=1;i<=2000000;i++)F[i]=F[i-1]*i%mod;
        for(int i=1;i<=2000000;i++)invf[i]=invf[i-1]*inv[i]%mod;
        for(int i=1;i<=2000000;i++)p2[i]=p2[i-1]*2%mod;
        
        cin>>q;
        while(q--){
            cin>>x>>y;
            divide(x);
            ll res=1; 
            for(int i=1;i<=mm;i++){
                //因子p[i]的贡献
                res=res*C(y+c[i]-1,y-1)%mod;
            }
            res=res*p2[y-1]%mod; 
            cout<<res<<'
    ';
        }
    } 
  • 相关阅读:
    UML——六大关系整理
    C#编写Windows 服务
    Centos7下lamp环境搭建的小笔记
    awk命令分析日志的简单笔记
    ssrf小记
    关于cookie的一些学习笔记
    xssbypass小记
    xss挑战赛小记 0x03(xssgame)
    xss挑战赛小记 0x01(xsstest)
    ubuntu下安装LAMP环境遇到的一些小问题
  • 原文地址:https://www.cnblogs.com/zsben991126/p/12296969.html
Copyright © 2011-2022 走看看