zoukankan      html  css  js  c++  java
  • 高精度求组合数

    
    #include <iostream>
    #include <vector>
    using namespace std;
    const int N = 5500 ;
    int prime[N] , sum[N] , tot;
    bool st[N];
    void get_prime(int n)
    {
        for(int i = 2;i <= n;i ++)
         {
             if(!st[i]) prime[tot ++] = i ;
             for(int j = 0; j < tot && i * prime[j] <= n ;j ++)
              {
                  st[i * prime[j]] = true ;
                  if(i % prime[j] == 0) break ;
              }
         }
         return ;
    
    }
    int get(int a , int p)
    {
        int sum = 0 ;
        while(a)
        {
             sum += a / p ;
             a /= p ;
        }
        return sum ;
    }
    vector<int> muti(vector<int> a , int b)
    {
        int t = 0 ;
        vector<int> res ;
        for(int i = 0;i < a.size() ;i ++)
        {
            t += a[i] * b ;
            res.push_back(t % 10) ;
            t /= 10 ;
        }
        while(t)
        {
            res.push_back(t % 10) ;
            t /= 10 ;
        }
        return res ;
    }
    int main()
    {
        
        int a , b ;
        cin >> a >>  b ;
        get_prime(a);
        for(int i = 0; i < tot ;i ++)
         {
             int p = prime[i] ;
             sum[i] = get(a,p) - get(b,p) - get(a-b , p);
         }
         vector<int> res; 
         res.push_back(1);
         for(int i = 0;i < tot ; i ++)
          for(int j = 0; j < sum[i] ;j ++)
           res = muti(res, prime[i]);
         for(int i = res.size() - 1;i >= 0;i --)
          cout << res[i]  ;
         cout << endl ;
        return 0;
        
    }
    
    每次做题提醒自己:题目到底有没有读懂,有没有分析彻底、算法够不够贪心、暴力够不够优雅。
  • 相关阅读:
    if else配对问题
    未完
    c,c++,java格式总结
    c++笔记
    Vaadin
    J2msi 自己制作的把exe打成安装包简易GUI程序(第二版 带DLL注册)
    scala手动编译运行
    jframe去掉窗体
    jdk1.7
    vbox共享文件 挂载
  • 原文地址:https://www.cnblogs.com/spnooyseed/p/12870857.html
Copyright © 2011-2022 走看看