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来保存每个素数所对应的 ...
随机推荐
- Failed to recover corrupt cache entry
RangeError java.lang.RuntimeException: ERROR: Failed to recover corrupt cache entry at com.sun.deplo ...
- Window文件目录遍历 和 WIN32_FIND_DATA 结构(非常详细的中文注释)
第一部分 *百度百科提供的内容总结:WIN32_FIND_DAT 第二部分 *程序实例 第三部分 *一篇使用FindFirstFile和FindNextFile函数的博文 第一部分 ...
- Compile for Windows on Linux(交叉编译,在Linux下编译Windows程序),以OpenSSL为例
OpenSSL for Windows In earlier articles, we have looked at how to create a gcc build environment on ...
- SpringMVC使用MultipartFile文件上传,多文件上传,带参数上传
一.配置SpringMVC 二.单文件与多文件上传 三.多文件上传 四.带参数上传 一.配置SpringMVC 在spring.xml中配置: <!-- springmvc文件上传需要配置的节点 ...
- 阻止系统自动睡眠的小软件,附C#制作过程(执行SetThreadExecutionState API函数,让系统误判)
因为有时下载东西的时候,不想让电脑自动深入睡眠,所以就开启了离开模式.这样不但不节能环保,而且到真正想要睡眠的时候就是一翻蛋疼. 改过自新,关闭了离开模式,同时无操作30分钟后也会进入睡眠模式.但是在 ...
- Golang环境搭建,Notepad++配置Golang开发环境,Golang发送邮件
http://blog.csdn.net/u011012932/article/details/53102264 http://blog.csdn.net/u011012932/article/det ...
- C++ 使用回调函数的方式 和 作用。 持续更新
先看两个demo: 一.在类test1中调用函数print() ,把print()的函数指针传递给test1的函数指针参数 test1.h: #include <stdio.h> #inc ...
- ORACLE(系统表student) 基本与深入学习
(一).首先我们先创建student表(系统有的可以跳过往下看)没有直接复制运行即可. create table student(sno varchar2(3) not null, --学号sname ...
- redis在asp.net 中的应用
1.redis介绍 Nosql数据库作为关系型数据库的补充,在互联网公司已经得到广泛的运用.redis便是其中的代表之一,redis是一种(key,value)基于内存的数据库,并支持多种数据结构,如 ...
- SQLPLUS执行PL/SQL语句块
1.首先登录Oracle HR schema: 2.对于PL/SQL程序,分号表示语句的结束:而使用 "." 号表示整个语句块的结束,也可以省略.按回车键后,该语句块不会执行,即 ...