zoukankan      html  css  js  c++  java
  • 刘汝佳 例题10-3 选择与除法

     1 #include<cstdio>
     2 #include<cstring>
     3 #include<cmath>
     4 #include<vector>
     5 #include<iostream>
     6 using namespace std;
     7 
     8 const int maxn = 10000;
     9 vector<int> primes;
    10 int e[maxn];
    11 
    12 /**
    13     add_factorial(int n, int d)计算(n!)^d,其思路是这样的:
    14         首先弄清楚add_integer(int n, int d)的作用:求n的质因子对应的指数。
    15         n!是连乘的关系,所以逐个求解n的质因子对应的指数,在原来求解的值上
    16         累加即可。e[i] += d;当d = 1,时表示n能被primes[i]整除,即primes[i]
    17         是n的一个质因子,就在e[i]的位置上+1。
    18     整个函数执行完毕就是唯一分解定理的代码化。即用代码求解了
    19     n! = p1^a1 * p2^a2 * p3^a3 *···*pn^an
    20 */
    21 
    22 // 乘以或除以n. d=0表示乘,d=-1表示除
    23 void add_integer(int n, int d) {///求n的质因子对应的指数
    24   for(int i = 0; i < primes.size(); i++) {
    25     while(n % primes[i] == 0) {///循环求对应质因子primes[i]的指数
    26       n /= primes[i];
    27       e[i] += d;
    28     }
    29     if(n == 1) break; // 提前终止循环,节约时间
    30   }
    31 }
    32 
    33 void add_factorial(int n, int d) {
    34   for(int i = 1; i <= n; i++)
    35     add_integer(i, d);
    36 }
    37 
    38 bool is_prime(int n) {
    39   int m = floor(sqrt(n) + 0.5);
    40   for(int a = 2; a <= m; a++)
    41     if(n % a == 0) return false;
    42   return true;
    43 }
    44 
    45 int main() {
    46   for(int i = 2; i <= 10000; i++)///求解2-10000之间的素数
    47     if(is_prime(i)) primes.push_back(i);
    48   int p, q, r, s;
    49   while(cin >> p >> q >> r >> s) {
    50     memset(e, 0, sizeof(e));
    51     ///C(p,q)
    52     add_factorial(p, 1);
    53     add_factorial(q, -1);
    54     add_factorial(p-q, -1);
    55     ///C(r,s)
    56     add_factorial(r, -1);
    57     add_factorial(s, 1);
    58     add_factorial(r-s, 1);
    59     double ans = 1;
    60     for(int i = 0; i < primes.size(); i++)
    61       ans *= pow(primes[i], e[i]);
    62     printf("%.5lf
    ", ans);
    63   }
    64   return 0;
    65 }
  • 相关阅读:
    laravel数据库配置
    mysql中utf8和utf8mb4区别
    laravel中artisan的用法
    laravel项目composer安装
    Linux 文件描述符
    Centos 7/8 SELinux
    Centos 7/8 高级磁盘管理技术
    Centos 7/8 搭建NFS Server
    Centos 7/8 日志管理
    Centos 7/8 Chronyd时间同步
  • 原文地址:https://www.cnblogs.com/yfs123456/p/5486059.html
Copyright © 2011-2022 走看看