题目链接:

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. UWP入门(三) -- StackPanel与Grid的区别

    原文:UWP入门(三) -- StackPanel与Grid的区别 ##1.Grid 下布局 <Grid Background="{ThemeResource ApplicationP ...

  2. 线性回归模型(Linear Regression)及Python实现

    线性回归模型(Linear Regression)及Python实现 http://www.cnblogs.com/sumai 1.模型 对于一份数据,它有两个变量,分别是Petal.Width和Se ...

  3. 查看SharePoint文档库是,显示层次目录,可以点击返回层次

    在sharepoint 2013中,Documnet library(文档库)包含多层文件夹,当进入到文件夹后,返回指定层次了(例如返回上一层),需要用浏览器的返回. 使用起来不方便,而且浏览器的返回 ...

  4. Http请求的响应没有Content-Length,只有Transfer-Encoding→chunked

    如题:Http请求的响应没有Content-Length,只有Transfer-Encoding→chunked.如图 原因猜测:如果请求的响应返回是某个对象,则不会显示Content-Length, ...

  5. Python装饰器和回调函数

    1.装饰器 装饰器用来实现一种切面功能,即一些函数在调用前都必须实现的功能,比如用户是否登录,用户是否有权限这类需求,都很容易由装饰器来实现. import functools def log(fun ...

  6. sso和oauth2.0的简单了解学习

    sso,单点登录,single sign on 缩写.sso多用于多个应用之间的切换,例如百度论坛.百度知道.百度云.百度文库等,在其中一个系统中登录,(登录有效期内)切换到另一个系统的时候,不必再次 ...

  7. express 中间件的理解

    nodejs(这指express) 中间件 铺垫: 一个请求发送到服务器,要经历一个生命周期,服务端要: 监听请求-解析请求-响应请求,服务器在处理这一过程的时候,有时候就很复杂了,将这些复杂的业务拆 ...

  8. CI框架注意

    1.在ci框架中,如果想继承自己写的控制器,从而不继承CI_Controller,可以在application/core中定义控制器,从而就可以在controllers中的控制器继承. 2.在ci框架 ...

  9. 解决IE8placeholder属性问题

    <!DOCTYPE html> <html> <head lang="en"> <meta charset="UTF-8&quo ...

  10. K8s集群部署(二)------ Master节点部署

    Master节点要部署三个服务:API Server.Scheduler.Controller Manager. apiserver提供集群管理的REST API接口,包括认证授权.数据校验以 及集群 ...