• vijosP1137 组合数


    vijosP1137 组合数

    链接:https://vijos.org/p/1137

    【思路】

      唯一分解定理。

      简化式子为 : C = (n*…*m) / (n-m)!。

      题目要求C质因子的数目,在质因子表上进行加减操作即数的乘除操作。

      步骤:

    1、  构建素数表,注意不要越界。

    2、  构造e数组。

    3、  累计ans

    【代码】

     1 #include<iostream>
     2 #include<cstring>
     3 #include<vector>
     4 #include<cmath>
     5 using namespace std;
     6 
     7 const int maxn = 100100;
     8 
     9 int e[maxn];
    10 int n,m,ans;
    11 vector<int> primes;
    12 
    13 void get_primes(int n) {
    14     bool su[maxn]; memset(su,true,sizeof(su));
    15     for(int i=2;i<=n;i++) if(su[i]) {
    16         primes.push_back(i);
    17         if(i<=sqrt(n)) for(int j=i*i;j<=n;j+=i) su[j]=false;
    18         //i<=sqrt(n) 否则RE 
    19     }
    20 }
    21 
    22 void calc(int x,int d) {
    23     for(int i=0;i<primes.size();i++) {
    24         while(x%primes[i]==0) {
    25             e[i] += d;
    26             x /= primes[i];
    27         }
    28         if(x==1) break;
    29     }
    30 }
    31 
    32 int main() {
    33     cin>>n>>m;
    34     
    35     get_primes(n);
    36     
    37     for(int i=m+1;i<=n;i++) calc(i,1);
    38     for(int i=2;i<=n-m;i++) calc(i,-1);
    39     
    40     for(int i=0;i<primes.size();i++) ans += e[i]? 1:0;
    41     cout<<ans;
    42     return 0;
    43 }
  • 相关阅读:
    antd的form表单4.0
    antd的select搜索展现错误
    ts的枚举类型简化if else if判断
    深入解读webpack
    常用es6语法总结
    手动配置webpack
    apply,all,bind的区别
    面试题小结
    react中根据后台值动态配置
    react动态路由以及获取动态路由
  • 原文地址:https://www.cnblogs.com/lidaxin/p/4873599.html
Copyright © 2020-2023  润新知