【暑假】[数学]UVa 10375 Choose and divide
UVa 10375 Choose and divide
题目:
http://acm.hust.edu.cn/vjudge/problem/viewProblem.action?id=19601
思路:
maxn=10000 如果计算maxn!再保存的话显然装不下。
但答案由阶乘的积或商组成,所以可以用唯一分解定理求解。大题思路就是把目前答案的质因子的指数用数组e保存,乘除都对e操作。
需要注意的是筛法求素数优化后的写法。
代码:
#include<iostream>
#include<cstdio>
#include<iomanip>
#include<vector>
#include<cstring>
#include<cmath>
#include<algorithm>
using namespace std; const int maxn = + ; vector<int> primes;
void make_primes() {
int vis[maxn];
memset(vis,,sizeof(vis));
int m=sqrt(maxn+0.5);
for(int i=;i<=m;i++) if(!vis[i]) {
primes.push_back(i);
for(int j=i*i;j<maxn;j+=i) vis[j]=;
}
for(int i=m;i<maxn;i++) //primes分两部分 m之后也有质数 不能忽略
if(!vis[i]) primes.push_back(i);
}
/*
bool is_prime(int n) {
int m = floor(sqrt(n) + 0.5);
for(int a = 2; a <= m; a++)
if(n % a == 0) return false;
return true;
}
void make_primes(){
for(int i=2;i<=10000;i++)
if(is_prime(i)) primes.push_back(i);
}
*/ int e[maxn]; //第i个质数的指数 void add_integer(int x,int d){
for(int i=;i<primes.size();i++) {
int m=primes[i];
while(x%m==){
x/=m; e[i]+= d;
}
if(x==) break;
}
}
void add_factorial(int x,int d){
for(int i=;i<=x;i++)
add_integer(i,d);
} int main() {
make_primes(); //return primes
int p,q,r,s;
while(cin>>p>>q>>r>>s) {
memset(e,,sizeof(e));
//add_factorial(a,d); 向质子表中乘(a!)^d;
add_factorial(p,);
add_factorial(q,-);
add_factorial(p-q,-);
add_factorial(s,);
add_factorial(r-s,);
add_factorial(r,-); double ans=1.0;
for(int i=;i<primes.size();i++)
ans *= pow(primes[i],e[i]);
//cout<<setw(5)<<ans<<"\n";
printf("%.5lf\n",ans);
}
return ;
}
【暑假】[数学]UVa 10375 Choose and divide的更多相关文章
- 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(唯一分解定理)
链接: https://uva.onlinejudge.org/index.php?option=com_onlinejudge&Itemid=8&page=show_problem& ...
- UVA 10375 Choose and divide【唯一分解定理】
题意:求C(p,q)/C(r,s),4个数均小于10000,答案不大于10^8 思路:根据答案的范围猜测,不需要使用高精度.根据唯一分解定理,每一个数都可以分解成若干素数相乘.先求出10000以内的所 ...
- UVA 10375 Choose and divide
n! 分解素因子 快速幂 ei=[N/pi^1]+ [N/pi^2]+ …… + [N/pi^n] 其中[]为取整 ei 为数 N!中pi 因子的个数: #include <iostream& ...
- UVA 10375 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
题意: 求组合数C(p, q) / C(r, s)结果保留5为小数. 分析: 先用筛法求出10000以内的质数,然后计算每个素数对应的指数,最后再根据指数计算答案. #include <cstd ...
- 【暑假】[数学]UVa 1262 Password
UVa 1262 Password 题目: Password Time Limit: 3000MS Memory Limit: Unknown 64bit IO Format: %lld ...
随机推荐
- 2817 Tangent的愤怒 - Wikioi
题目描述 Description 如果机房马上要关门了,或者你急着要和MM约会,请直接跳到第六个自然段. 第二段:本题改编自Usaco Training 4.4.2... 第三段:本题加大了数据强度. ...
- DEDECMS采集规则,过滤,替换文章内的部分内容
1.采集去除链接[Copy to clipboard]CODE:{dede:trim}]*)>([^<]*){/dede:trim}---------------------------- ...
- Unity3d大会的部分总结
原地址:http://blog.csdn.net/sgnyyy/article/details/23775219 一.项目开发,管理和发布策略 1. 四大准则 a. 美术的资源 ...
- 深入了解nagios的各配置文件
转自http://wolfword.blog.51cto.com/4892126/1220209 对每个配置文件进行讲解,深入理解nagios,好好学习,天天向上~ (1)templates.cf ...
- 1058-Tom and Jerry
描述 Tom和Jerry在10*10的方格中: *...*..... ......*... ...*...*.. .......... ...*.C.... *.....*... ...*...... ...
- ECNU1104-BFS
简单的BFS题意:多起点多终点 /* 简单的BFS 题意:多起点多终点 */ #include<stdio.h> #include<string.h> #include< ...
- linux命令补全 忘记命令只记得开头
linux的shell不仅提供上下箭头来翻阅历史使用过的命令,还提供命令补全功能. 例如,你想创建一个文件夹,只记得是m开头的命令,此时可以: ①输入m ②按键盘上的Tab键两次 (有可能还出现这句话 ...
- hhtml from表单为什么能提交数据
1.html的列表,分为list,table,form. form表单是专门用来提交数据的,即上传数据的.所以form表单默认是必须有提交按钮的,也就是必须要有个button type类型为submi ...
- jquery的ajax向后台servlet传递json类型的多维数组
后台运行结果: 前台运行结果: ...
- QTreeView只显示指定驱动器及其目录,隐藏所有兄弟节点
MainWindow::MainWindow(QWidget *parent) : QMainWindow(parent), ui(new Ui::MainWindow) { ui->setup ...