zoukankan      html  css  js  c++  java
  • poj2992 阶乘分解

    /*
    将C(n,k)质因数分解,然后约束个数按公式计算 
    */
    #include<iostream>
    #include<cstring>
    #include<cstdio>
    #include<cmath>
    using namespace std;
    #define ll long long 
    
    int v[1000],prime[1000],m,c[200],p[200];
    void init(int n){
        memset(prime,0,sizeof prime);
        memset(v,0,sizeof v);
        m=0;
        for(int i=2;i<=n;i++){
            if(v[i]==0){
                v[i]=i;
                prime[++m]=i;
            }
            for(int j=1;j<=m;j++){
                if(prime[j]>v[i] || prime[j]*i>n) break;
                v[i*prime[j]]=prime[j];
            }
        }
    }
    int cal(int p,int n){
        int ret=0,tmp=p;
        while(tmp<=n){
            ret+=n/tmp;
            tmp*=p;
        }
        return ret;
    }
    
    int main(){
        int n,k;
        init(500);
        while(scanf("%d%d",&n,&k)==2){
            memset(c,0,sizeof c);
            memset(p,0,sizeof p);
            ll ans=1;
            for(int i=1;i<=m;i++){
                if(prime[i]>n) break;
                c[i]+=cal(prime[i],n);
            }
            for(int i=1;i<=m;i++){
                if(prime[i]>n-k)break;
                c[i]-=cal(prime[i],n-k);
            }
            for(int i=1;i<=m;i++){
                if(prime[i]>k) break;
                c[i]-=cal(prime[i],k);
            }
            for(int i=1;i<=m;i++)
                if(c[i]) ans*=(c[i]+1);
            printf("%lld
    ",ans);
        }
    }
  • 相关阅读:
    AcWing 143. 最大异或对
    分组异或
    Java面向对象的思维导图
    数组中超过一半的元素
    SQL带事务的存储过程添加功能
    分页存储过程MYSQL
    文件夹的压缩
    邮箱发送文件
    SQL万能存储过程分页
    Api反射泛型添加
  • 原文地址:https://www.cnblogs.com/zsben991126/p/10231764.html
Copyright © 2011-2022 走看看