UVA10375 Choose and Divide (唯一分解定理)

本文介绍了一种使用素数分解的方法来计算组合数比值的问题,通过唯一分解定理实现了C(p,q)/C(r,s)的高效计算,并提供了一个具体的C语言实现示例。

摘要生成于 C知道 ,由 DeepSeek-R1 满血版支持, 前往体验 >



题意:已知C(m,n)=m! / (n!*(m-n!)),输入整数p,q,r,s(p>=q,r>=s,p,q,r,s<=10000),计算C(p,q)/C(r,s)。输出保证不超过10^8,保留5位小数


解题思路:使用唯一分解定理进行求解


#include<stdio.h>
#include<string.h>
#include<iostream>
#include<math.h>
#include<stdlib.h>
#include<ctype.h>
#include<vector>
#include<algorithm>
#define CPY(A,B)memcpy(A,B,sizeof(A))
typedef long long LL;
typedef unsigned long long uLL;
const int MOD=1e9+7;
const int INF=0x3f3f3f3f;
const LL INFF=0x3f3f3f3f3f3f3f3fLL;
const double EPS=1e-9;
const double OO=1e20;
const double PI=acos (-1.0);
int dx[]= {0,1,0,-1};
int dy[]= {1,0,-1,0};
int gcd (const LL &a,const LL &b) {return b==0?a:gcd (b,a%b);}
using namespace std;
const int MAXN=10000;
int Prime[MAXN],psize;
void INIT() {
    int m=sqrt (MAXN+0.5);
    memset (Prime,0,sizeof Prime);
    for (int i=2; i<=m; ++i) {
        if (!Prime[i]) {
            for (int j=i*i; j<=MAXN; j+=i) {
                Prime[j]=1;
            }
        }
    }
    psize=0;
    for (int i=2; i<MAXN; ++i) {
        if (!Prime[i]) {
            Prime[psize++]=i;
        }
    }
}
int e[MAXN];//当前结果的唯一分解式中各个素数的指数
void add_int (int n,int d) {
    for (int i=0; i<psize; ++i) {
        while (n%Prime[i]==0) {
            n/=Prime[i];
            e[i]+=d;
        }
        if (n==1) { break; }
    }
}
inline void add_f (int n,int d) {
    for (int i=1; i<=n; ++i) {
        add_int (i,d);
    }
}
//d=0表示乘,d=-1表示除
int main() {
    INIT();
    int p,q,r,s;
    while (scanf ("%d%d%d%d",&p,&q,&r,&s) !=EOF) {
        memset (e,0,sizeof e);
        add_f (p,1);
        add_f (q,-1);
        add_f (p-q,-1);
        add_f (r,-1);
        add_f (s,1);
        add_f (r-s,1);
        int maxn=max (p,r);
        double ans=1;
        for (int i=0; i<=maxn; ++i) {
            ans*=pow (Prime[i],e[i]);
        }
        printf ("%.5f\n",ans);
    }
    return 0;
}


内容概要:本文档详细介绍了Analog Devices公司生产的AD8436真均方根-直流(RMS-to-DC)转换器的技术细节及其应用场景。AD8436由三个独立模块构成:轨到轨FET输入放大器、高动态范围均方根计算内核和精密轨到轨输出放大器。该器件不仅体积小巧、功耗低,而且具有广泛的输入电压范围和快速响应特性。文档涵盖了AD8436的工作原理、配置选项、外部组件选择(如电容)、增益调节、单电源供电、电流互感器配置、接地故障检测、三相电源监测等方面的内容。此外,还特别强调了PCB设计注意事项和误差源分析,旨在帮助工程师更好地理解和应用这款高性能的RMS-DC转换器。 适合人群:从事模拟电路设计的专业工程师和技术人员,尤其是那些需要精确测量交流电信号均方根值的应用开发者。 使用场景及目标:①用于工业自动化、医疗设备、电力监控等领域,实现对交流电压或电流的精准测量;②适用于手持式数字万用表及其他便携式仪器仪表,提供高效的单电源解决方案;③在电流互感器配置中,用于检测微小的电流变化,保障电气安全;④应用于三相电力系统监控,优化建立时间和转换精度。 其他说明:为了确保最佳性能,文档推荐使用高质量的电容器件,并给出了详细的PCB布局指导。同时提醒用户关注电介质吸收和泄漏电流等因素对测量准确性的影响。
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值