题目链接:

https://www.luogu.org/problemnew/show/UVA10375

分析:

这道题可以用唯一分解定理来做。

什么是唯一分解定理?百度即可,这里也简介一下。

对于任意一个自然数,都可以写成一些素数的幂次相乘的结果

比如说,26=13∗226=13*226=13∗2,30=2∗3∗530=2*3*530=2∗3∗5.

然后说详细做法:

首先make一个素数表prime,具体怎么做呢?

先用一个模板筛出合数:

for(int i=2;i<=100;i++)
{
if(vis[i]!=1)
for(int j=i*i;j<=10000;j+=i)
vis[j]=1;
}
反正蒟蒻孤陋寡闻,这已经是我知道最快的造表法了

弄出了合数,我们再把每一个素数记到一个vector里

for(int i=2;i<=10000;i++)
{
if(vis[i]==0)
{
prime.push_back(i);
}
}

这样为了之后循环幂次方便(一次完成,胜造多组数据)

之后就套公式

C(m,n)=n!(m−n)!m!C(m,n)=^{m!}_{n!(m-n)!}C(m,n)=n!(m−n)!m!​

(中间的除号被吞了

用唯一分解来表示每个数,方便约分,因为此题的实质就是解决越界问题。

EndEndEnd

代码:

#include<cstdio>
#include<cmath>
#include<vector>
#include<cstring>
using namespace std;
int vis[10005];
vector<int>prime;
int e[10005];
void search(int n,int d)
{
for(int i=0;i<prime.size();i++)
{
while(n%prime[i]==0)
{
n=n/prime[i];
e[i]+=d;
}
if(n==1)break;
}
}
void pd(int n,int d)
{
for(int i=1;i<=n;i++)
{
search(i,d);
}
}
int main()
{
for(int i=2;i<=100;i++)
{
if(vis[i]!=1)
for(int j=i*i;j<=10000;j+=i)
vis[j]=1;
}
for(int i=2;i<=10000;i++)
{
if(vis[i]==0)
{
prime.push_back(i);
}
}
int p,q,r,s;
while(scanf("%d%d%d%d",&p,&q,&r,&s)==4)
{
memset(e,0,sizeof(e));
pd(p,1);
pd(q,-1);
pd(p-q,-1);
pd(r,-1);
pd(s,1);
pd(r-s,1);
double ans=1;
for(int i=0;i<prime.size();i++)
{
ans*=pow(prime[i],e[i]);
}
printf("%.5lf\n",ans);
}
return 0;
}

UVA10375 选择与除法 Choose and divide 题解的更多相关文章

  1. uva10375 Choose and Divide(唯一分解定理)

    uva10375 Choose and Divide(唯一分解定理) 题意: 已知C(m,n)=m! / (n!*(m-n!)),输入整数p,q,r,s(p>=q,r>=s,p,q,r,s ...

  2. UVA10375 Choose and divide 质因数分解

    质因数分解: Choose and divide Time Limit: 3000MS   Memory Limit: Unknown   64bit IO Format: %lld & %l ...

  3. UVA - 10375 Choose and divide[唯一分解定理]

    UVA - 10375 Choose and divide Choose and divide Time Limit: 1000MS   Memory Limit: 65536K Total Subm ...

  4. 【暑假】[数学]UVa 10375 Choose and divide

    UVa 10375 Choose and divide 题目: http://acm.hust.edu.cn/vjudge/problem/viewProblem.action?id=19601 思路 ...

  5. UVa10375:选择与除法(唯一分解定理)

    The binomial coefficient C(m,n) is defined as Given four natural numbers p, q, r, and s, compute the th ...

  6. uva10375 Choose and divide

    唯一分解定理. 挨个记录下每个质数的指数. #include<cstdio> #include<algorithm> #include<cstring> #incl ...

  7. Choose and divide(唯一分解定理)

    首先说一下什么是唯一分解定理 唯一分解定理:任何一个大于1的自然数N,如果N不是质数,那么N可以分解成有限个素数的乘积:例:N=(p1^a1)*(p2^a2)*(p3^a3)......其中p1< ...

  8. 【JSP 标签】选择判断c:choose

    在JSP页面中对 根据一个属性的多个可能的值进行相应的输出 <%@ page language="java" contentType="text/html; cha ...

  9. UVa 10375 选择与除法(唯一分解定理)

    https://vjudge.net/problem/UVA-10375 题意: 输入整数p,q,r,s,计算C(p,q)/C(r,s). 思路: 先打个素数表,然后用一个数组e来保存每个素数所对应的 ...

随机推荐

  1. Android零基础入门第66节:RecyclerView点击事件处理

    前面两期学习了RecyclerView的简单使用,并为其item添加了分割线.在实际运用中,无论是List还是Grid效果,基本都会伴随着一些点击操作,那么本期就来一起学习RecyclerView的点 ...

  2. new和delete必须成对出现吗?【网上集合贴+个人总结】

    new和delete必须成对出现吗?[网上集合贴+个人总结] 1.从内存泄露与否的角度考虑 new 和 delete不一定要成对出現.理论上是這樣的.但是从习惯上來說,new delete成對出現是一 ...

  3. 学会了使用qmake -query

    D:\Qt\Qt5.6.2_static_kk\bin>qmake -queryQT_SYSROOT:QT_INSTALL_PREFIX:C:/Qt/Qt5.6.2_static_kkQT_IN ...

  4. SpringMVC使用MultipartFile文件上传,多文件上传,带参数上传

    一.配置SpringMVC 二.单文件与多文件上传 三.多文件上传 四.带参数上传 一.配置SpringMVC 在spring.xml中配置: <!-- springmvc文件上传需要配置的节点 ...

  5. Linux运维工程师成长路线及应实现的目标

    作为一名运维工程师,需要学习的东西非常多,在学习的过程中也没有任何捷径可言,必须一步一个脚印地学习.积累才能把个人技能提升到相应的高度.根据目前流行的发行版及国际流行的Linux认证,红帽认证和LPI ...

  6. Golang环境搭建,Notepad++配置Golang开发环境,Golang发送邮件

    http://blog.csdn.net/u011012932/article/details/53102264 http://blog.csdn.net/u011012932/article/det ...

  7. linux如何直接运行python文件

    1.首先创建好py文件 touch GetCiscoCpu.py 2. 编写GetCiscoCpu.py vi GetCiscoCpu.py /********************** *本文是用 ...

  8. Yolov3代码分析与训练自己数据集

    现在要针对我们需求引入检测模型,只检测人物,然后是图像能侧立,这样人物在里面占比更多,也更清晰,也不需要检测人占比小的情况,如下是针对这个需求,用的yolov3-tiny模型训练后的效果. Yolov ...

  9. TCP UDP socket http webSocket 之间的关系

    ---恢复内容开始--- OSI&TCP/IP模型 要弄清tcp udp socket http websocket之间的关系,首先要知道经典的OSI七层模型,与之对应的是TCP/IP的四层模 ...

  10. 学习过程中遇到的python内置函数,后续遇到会继续补充进去

    1.python内置函数isinstance(数字,数字类型),判断一个数字的数字类型(int,float,comple).是,返回True,否,返回False2.python内置函数id()可以查看 ...