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的更多相关文章

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

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

  2. UVa 10375 - Choose and divide(唯一分解定理)

    链接: https://uva.onlinejudge.org/index.php?option=com_onlinejudge&Itemid=8&page=show_problem& ...

  3. UVA 10375 Choose and divide【唯一分解定理】

    题意:求C(p,q)/C(r,s),4个数均小于10000,答案不大于10^8 思路:根据答案的范围猜测,不需要使用高精度.根据唯一分解定理,每一个数都可以分解成若干素数相乘.先求出10000以内的所 ...

  4. UVA 10375 Choose and divide

    n! 分解素因子 快速幂 ei=[N/pi^1]+ [N/pi^2]+ …… + [N/pi^n]  其中[]为取整 ei 为数 N!中pi 因子的个数: #include <iostream& ...

  5. UVA 10375 Choose and divide(大数的表示)

    紫上给得比较奇怪,其实没有必要用唯一分解定理.我觉得这道题用唯一分解只是为了表示大数. 但是分解得到的幂,累乘的时候如果顺序很奇怪也可能溢出.其实直接边乘边除就好了.因为答案保证不会溢出, 设定一个精 ...

  6. 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 ...

  7. UVA10375 Choose and divide 质因数分解

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

  8. UVa 10375 (唯一分解定理) Choose and divide

    题意: 求组合数C(p, q) / C(r, s)结果保留5为小数. 分析: 先用筛法求出10000以内的质数,然后计算每个素数对应的指数,最后再根据指数计算答案. #include <cstd ...

  9. 【暑假】[数学]UVa 1262 Password

    UVa 1262  Password 题目: Password   Time Limit: 3000MS   Memory Limit: Unknown   64bit IO Format: %lld ...

随机推荐

  1. 1187: [HNOI2007]神奇游乐园 - BZOJ

    Description 经历了一段艰辛的旅程后,主人公小P乘坐飞艇返回.在返回的途中,小P发现在漫无边际的沙漠中,有一块狭长的绿地特别显眼.往下仔细一看,才发现这是一个游乐场,专为旅途中疲惫的人设计. ...

  2. suse pshell连接不上

    /etc/ssh/sshd_config #PasswordAuthentication no改成yessuse默认为密钥认证

  3. PAT-乙级-1036. 跟奥巴马一起编程(15)

    1036. 跟奥巴马一起编程(15) 时间限制 400 ms 内存限制 65536 kB 代码长度限制 8000 B 判题程序 Standard 作者 CHEN, Yue 美国总统奥巴马不仅呼吁所有人 ...

  4. ActivePython2.7 +Firefly1.2.2+WIN7服务器搭建过程(已通过)

    原地址:http://www.9miao.com/question-15-54027.html 1.ActivePython2.7 版本(内部已经包含easy_install,pywin32)2.所需 ...

  5. Django 后台搭建

    # Django settings for gameadmin project. DEBUG = True TEMPLATE_DEBUG = DEBUG ADMINS = ( # ('Your Nam ...

  6. HDU 1203 I NEED A OFFER!(01 背包DP)

    点我看题目 题意 : 中文题不详述. 思路 :类似于01背包的DP,就是放与不放的问题,不过这个要求概率,至少得到一份offer的反面就是一份也得不到,所以先求一份也得不到的概率,用1减掉就可以得到所 ...

  7. ecos内核概览--bakayi译

    http://blog.csdn.net/wangzaiwei2006/article/details/6453423

  8. Servlet课程0426(十)Servlet如何删除cookie

    //如何删除Cookie案例 package com.tsinghua; import javax.servlet.http.*; import java.io.*; public class Coo ...

  9. ios 应用剖析

    在创建HelloWorld的过程中,生成了很多文件(展开Xcode左边的项目导航视图可以看到,如图2-8所示),它们各自的作用是什么?彼此间又是怎样的一种关系呢? 图2-8 项目导航视图 如图2-8所 ...

  10. Flash Builder 4.6 基本设置

    Flash Builder 4.6 字体修改 打开Flash Builder4.6 -> 窗口 -> 首选项 -> 左边目录选择常规 -> 外观 -> 颜色和字体 -&g ...