Disgruntled Judge UVa 10375
来源:互联网 发布:pdf修改软件 编辑:程序博客网 时间:2024/06/15 10:40
题目链接
思路:这道题是算法竞赛紫书第十章第316页的一个习题,上面有主要的代码;
方法:因为含有阶乘,直接运算,数太大,一定会溢出的,而书上的方法,避免了这种溢出,而是采用分解的方法,利用数论中合数可以分解若干个素数相乘的形式,相乘或者相除时,只需在对应素数的指数相加减,即可。我们可以另开一个数组,用来对应存素数的指数。(代码简单易懂)。
#include <iostream>#include <string.h>#include <math.h>#include <vector>#include <stdio.h>#include <algorithm>using namespace std;int e[100000];bool book[100000];vector<int>prime;void Prime(){ for(int i=2;i<=10000;i++) { if(book[i]==false)prime.push_back(i); for(int j=i*i;j<=10000;j+=i) if(book[j]==false) book[j]=true; }}void Add_factorial(int n,int d){ for(int i=0; i<prime.size()&&n>1; i++) while(n%prime[i]==0) { e[i]+=d; n=n/prime[i]; }}void add_factorial(int m,int k){ for(int i=1;i<=m;i++) Add_factorial(i,k); return ;}int main(){ int p,q,r,s; memset(book,false,sizeof(book)); Prime(); while(cin>>p>>q>>r>>s) { memset(e,0,sizeof(e)); add_factorial(p,1); add_factorial(q,-1); add_factorial(p-q,-1); add_factorial(r,-1); add_factorial(s,1); add_factorial(r-s,1); double cont=1.0; for(int i=0;i<prime.size(); i++) cont*=pow(prime[i],e[i]); printf("%.5lf\n",cont); } return 0;}
阅读全文
0 0
- Disgruntled Judge UVa 10375
- UVA 12169 - Disgruntled Judge
- uva 12169 Disgruntled Judge
- UVA - 12169 Disgruntled Judge
- UVa 12169 Disgruntled Judge
- Disgruntled Judge UVA
- Disgruntled Judge UVA
- Disgruntled Judge UVA
- Disgruntled Judge UVA
- Disgruntled Judge UVA
- UVA 12169 Disgruntled Judge(暴力)
- UVA 12169(p316)----Disgruntled Judge
- UVA-12169 - Disgruntled Judge(数学+枚举)
- Uva 12169 Disgruntled Judge 扩展欧几里得,暴力
- uva 12169 - Disgruntled Judge(暴力or欧几里得 )
- UVA 12169 Disgruntled Judge (拓展欧几里德)
- UVA 12169 Disgruntled Judge (扩展欧几里得)
- UVA 12196 Disgruntled Judge 拓展欧几里德算法
- VC目标代码的阅读理解2
- 使用cJSON解析JSON字符串
- 蓝桥杯 合并石子
- 数据库2-设计
- support-v4.jar包冲突
- Disgruntled Judge UVa 10375
- bzoj1006(弦图最大势)
- Java后端学习流程
- 【Redis】Redis与MySQL数据一致性的思考
- ava基础部分的简单应用
- 汇编语言
- 本体研究综述(笔记版)
- 从首页问答标题到问答详情页
- STM32学习记录之GPIO篇