zoukankan      html  css  js  c++  java
  • Uva 10375 选择与除法 唯一分解定理

    题目链接:https://vjudge.net/contest/156903#problem/E

    题意:已知

    求:C(p,q)/C(r,s)

    其中p,q,r,s都是10^4,硬算是肯定超数据类型的。

    可以这样处理:利用唯一分解式约分;

    首先将所有数,唯一分解;最后,算素数的乘积;

     1 #include <bits/stdc++.h>
     2 
     3 using namespace std;
     4 
     5 const int maxn = 10000;
     6 vector<int> primes;
     7 int e[maxn];
     8 
     9 bool is_prime(int n) {
    10     int m = floor(sqrt(n)+0.5); //向下取整
    11     for(int i=2;i<=m;i++)
    12         if(n%i==0) return false;
    13     return true;
    14 }
    15 
    16 void add_integer(int n,int d) {
    17     for(int i=0;i<primes.size();i++) {
    18         while(n%primes[i]==0) {
    19             n /=primes[i];
    20             e[i]+=d;
    21         }
    22         if(n==1) break;
    23     }
    24 }
    25 
    26 void add_factorial(int n,int d) {
    27     for(int i=1;i<=n;i++)
    28         add_integer(i,d);
    29 }
    30 
    31 int main()
    32 {
    33     for(int i=2;i<=10000;i++)
    34         if(is_prime(i)) primes.push_back(i);
    35 
    36     int p,q,r,s;
    37     while(cin>>p>>q>>r>>s) {
    38         memset(e,0,sizeof(e));
    39         add_factorial(p,1);
    40         add_factorial(q,-1);
    41         add_factorial(p-q,-1);
    42         add_factorial(r,-1);
    43         add_factorial(s,1);
    44         add_factorial(r-s,1);
    45 
    46         double ans = 1;
    47         for(int i=0;i<primes.size();i++) {
    48             ans*=pow(primes[i],e[i]);
    49         }
    50 
    51         printf("%.5lf
    ",ans);
    52 
    53     }
    54 
    55     return 0;
    56 }
    View Code
  • 相关阅读:
    ANSI C
    如何判断机器的endianness
    union的常见用法
    主流浏览器引擎
    用宏来求数组元素个数
    inode
    分区时"磁盘上没有足够的空间完成此操作"的解决方法
    删除OEM分区
    jquery加table布局 模仿实现FaceBook Dialog
    Container.DataItem使用
  • 原文地址:https://www.cnblogs.com/TreeDream/p/6659243.html
Copyright © 2011-2022 走看看