zoukankan      html  css  js  c++  java
  • 例10-3 uva10375(唯一分解定理)

    题意:已知C(m,n) = m!/(n!(m-n)!),已知p,q,r,s,求C(p,q)/C(r,s)

    思路:

    全部分解成质因子,相乘则加,除则减


    #include <iostream>
    #include <cstring>
    #include <cstdio>
    #include <algorithm>
    #include <cmath>
    #include <map>
    #include <vector>
    using namespace std;
    typedef long long ll;
    typedef unsigned long long ull;
    const int N =10001;
    vector<int>prime;
    int pri[N];
    int num[N];
    void getprime()
    {
        memset(pri,1,sizeof(pri));
        for(int i = 2; i <= N; i++)
        {
            if(pri[i])
            {
                prime.push_back(i);
                for(int j = i+i; j <= N; j+=i)
                    pri[j] = 0;
            }
        }
    }
    
    void add_factorial(int n,int d)   //
    {
        for(int i = 1;i <= n;i++)
        {
            int tt = i;
            for(int j = 0;j < prime.size();j++)
            {
                while(tt % prime[j] == 0)
                {
                    num[j]+=d;
                    tt /= prime[j];
                }
                if(tt == 1)
                    break;
            }
        }
    }
    
    int main()
    {
        int p,q,r,s;
        getprime();
        while(scanf("%d%d%d%d",&p,&q,&r,&s) != EOF)
        {
            memset(num,0,sizeof(num));
            add_factorial(p,1);
            add_factorial(q,-1);
            add_factorial(p-q,-1);
            add_factorial(r,-1);
            add_factorial(s,1);
            add_factorial(r-s,1);
            double ans = 1.0;
            for(int i = 0;i < prime.size();i++)
            {
                ans *= pow(prime[i],num[i]);
            }
            printf("%.5lf
    ",ans);
        }
        return 0;
    }
    

      

  • 相关阅读:
    源代码的下载和编译
    Git使用入门
    搭建Android开发环境
    安卓系统移植与驱动开发概述
    第十章
    第九章
    第八章
    第七章读书笔记
    第六章读书笔记
    第五章读书笔记
  • 原文地址:https://www.cnblogs.com/Przz/p/5409720.html
Copyright © 2011-2022 走看看