UVA10375 选择与除法 Choose and divide 题解
题目链接:
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 题解的更多相关文章
- 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 ...
- UVA10375 Choose and divide 质因数分解
质因数分解: Choose and divide Time Limit: 3000MS Memory Limit: Unknown 64bit IO Format: %lld & %l ...
- UVA - 10375 Choose and divide[唯一分解定理]
UVA - 10375 Choose and divide Choose and divide Time Limit: 1000MS Memory Limit: 65536K Total Subm ...
- 【暑假】[数学]UVa 10375 Choose and divide
UVa 10375 Choose and divide 题目: http://acm.hust.edu.cn/vjudge/problem/viewProblem.action?id=19601 思路 ...
- UVa10375:选择与除法(唯一分解定理)
The binomial coefficient C(m,n) is defined as Given four natural numbers p, q, r, and s, compute the th ...
- uva10375 Choose and divide
唯一分解定理. 挨个记录下每个质数的指数. #include<cstdio> #include<algorithm> #include<cstring> #incl ...
- Choose and divide(唯一分解定理)
首先说一下什么是唯一分解定理 唯一分解定理:任何一个大于1的自然数N,如果N不是质数,那么N可以分解成有限个素数的乘积:例:N=(p1^a1)*(p2^a2)*(p3^a3)......其中p1< ...
- 【JSP 标签】选择判断c:choose
在JSP页面中对 根据一个属性的多个可能的值进行相应的输出 <%@ page language="java" contentType="text/html; cha ...
- UVa 10375 选择与除法(唯一分解定理)
https://vjudge.net/problem/UVA-10375 题意: 输入整数p,q,r,s,计算C(p,q)/C(r,s). 思路: 先打个素数表,然后用一个数组e来保存每个素数所对应的 ...
随机推荐
- C#高性能大容量SOCKET并发(五):粘包、分包、解包
原文:C#高性能大容量SOCKET并发(五):粘包.分包.解包 粘包 使用TCP长连接就会引入粘包的问题,粘包是指发送方发送的若干包数据到接收方接收时粘成一包,从接收缓冲区看,后一包数据的头紧接着前一 ...
- Android零基础入门第61节:滚动视图ScrollView
原文:Android零基础入门第61节:滚动视图ScrollView 前面几期学习了ProgressBar系列组件.ViewAnimator系列组件.Picker系列组件和时间日期系列组件,接下来几期 ...
- Windows10 使用Virtual Box一启动虚拟机就蓝屏(错误代码SYSTEM_SERVICE_EXCEPTION)解决方案
原文:Windows10 使用Virtual Box一启动虚拟机就蓝屏(错误代码SYSTEM_SERVICE_EXCEPTION)解决方案 一打开虚拟机电脑就立马蓝屏重启,新建虚拟机也没用,然后就开始 ...
- 【Eclipse常见错误】-Cannot return from outside a function or method
最近发现myeclipse10中有几处bug 比如: Cannot return from outside a function or method onClick="return chec ...
- Spring Cloud微服务简介
概述 Spring Cloud给开发者提供一套按照一定套路快速开发分布式工具.它为微服务架构中涉及**配置管理,服务治理,断路器,智能路由,微代理,控制总线,全局锁,分布式会话和集群状态等操作提供了一 ...
- play框架之简介
Play Framework是一个开源的Web框架,背后商业公司是Typesafe.要介绍Play之前,首先理清Play的两个不同的分支. Play 1.x 使用Java开发,最新版本是1.3.1,只 ...
- git上如何处理无法clone和merge
对于一些需要FQ才能克隆下来的项目,我们需要使用代理 进入terminal: 设置代理: git config --global http.proxy http://127.0.0.1:1087 gi ...
- IM即时通讯:如何跳出传统思维来设计聊天室架构?
因为视频直播业务的大规模扩张,聊天室这种功能在最近几年又火了起来.本篇文章将会重点挑选聊天室这个典型场景,和大家分享一下网易云信在实现这个功能时是如何做架构设计的. 相关推荐阅读几十万人同时在线的直播 ...
- vuex分模块2
深入理解Vuex 模块化(module) 转载 2017-09-26 作者:ClassName 我要评论 本篇文章主要介绍了Vuex 模块化(module),小编觉得挺不错的,现在分享给大 ...
- 【JAVA】POI生成EXCEL图表(柱状图、折线等)
1.使用excel工具自带的图形工具创建一个图: 2.绑定数据区域: 3.数据区域绑定完成,我们要做的就是将数据写入到数据区域中: 4.标记 5.POI 引入包 <!-- https://mvn ...