首先说一下什么是唯一分解定理

唯一分解定理:任何一个大于1的自然数N,如果N不是质数,那么N可以分解成有限个素数的乘积;例:N=(p1^a1)*(p2^a2)*(p3^a3)......其中p1<p2<p3......

所以当我们求两个很大的数相除时  唯一分解定理是一个不错的选择,不会爆范围

下面具体说一下怎么求唯一分解定理:

首先我们需要知道所有的素数:  用埃式算法打表求得:

void is_prime()
{
cnt=;
for(int i=;i<=maxn;i++)
{
if(!vis[i])
{
prime[cnt++]=i;
for(int j=i*;j<=maxn;j+=i) vis[j]=true;
}
}
}

接下来 就是求pi和ai了,

void solve(ll n,ll d)
{
for(int i=;i<cnt;i++)
{
while(n%prime[i]==)
{
n/=prime[i];
e[i]+=d;
}
if(n==) return ;
}
}

下面看一道例题:

题目链接:https://vjudge.net/problem/UVA-10375

题目大意:用C(p,q)/C(r,s)  最后结果保留5位小数

思路:这道题不用唯一分解定理就不好做了,阶层相乘很有可能会爆数据范围,总之挺麻烦的,但是用唯一分解定理跟快就能A了  很简单  看代码应该就能明白了

#include<iostream>
#include<stdio.h>
#include<string.h>
#include<math.h>
using namespace std;
typedef long long ll;
const int maxn=1e4+;
ll prime[maxn];
ll e[maxn];
bool vis[maxn];
ll cnt;
void is_prime()
{
cnt=;
for(int i=;i<=maxn;i++)
{
if(!vis[i])
{
prime[cnt++]=i;
for(int j=i*;j<=maxn;j+=i) vis[j]=true;
}
}
}
void solve(ll n,ll d)//n为相乘的数 当为分子时d为1 为分母时d为-1 很好理解 对应指数+1或-1嘛
{
for(int i=;i<cnt;i++)
{
while(n%prime[i]==)
{
n/=prime[i];
e[i]+=d;
}
if(n==) return ;
}
}
int main()
{
ll p,q,r,s;
double ans;
memset(vis,false,sizeof(vis));
is_prime();
// for(int i=0;i<cnt;i++) cout<<prime[i]<<" ";
// cout<<endl;
while(cin>>p>>q>>r>>s)
{
ans=;
memset(e,,sizeof(e));
for(int i=p;i>=;i--) solve(i,);
for(int i=p-q;i>=;i--) solve(i,-);
for(int i=q;i>=;i--) solve(i,-);
for(int i=r-s;i>=;i--) solve(i,);
for(int i=s;i>=;i--) solve(i,);
for(int i=r;i>=;i--) solve(i,-);
for(int i=;i<cnt;i++)
if(e[i]) ans*=pow(prime[i],e[i]); printf("%.5lf\n",ans);
}
}

Choose and divide(唯一分解定理)的更多相关文章

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

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

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

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

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

  4. 【暑假】[数学]UVa 10375 Choose and divide

    UVa 10375 Choose and divide 题目: http://acm.hust.edu.cn/vjudge/problem/viewProblem.action?id=19601 思路 ...

  5. 唯一分解定理(以Minimun Sum LCM UVa 10791为例)

    唯一分解定理是指任何正整数都可以分解为一些素数的幂之积,即任意正整数n=a1^p1*a2^p2*...*ai^pi:其中ai为任意素数,pi为任意整数. 题意是输入整数n,求至少2个整数,使得它们的最 ...

  6. POJ - 1845 G - Sumdiv (唯一分解定理)

    Consider two natural numbers A and B. Let S be the sum of all natural divisors of A^B. Determine S m ...

  7. B - Common Divisors (codeforces)数论算法基本定理,唯一分解定理模板

    You are given an array aa consisting of nn integers. Your task is to say the number of such positive ...

  8. NOIP2009Hankson 的趣味题[唯一分解定理|暴力]

    题目描述 Hanks 博士是 BT (Bio-Tech,生物技术) 领域的知名专家,他的儿子名叫 Hankson.现 在,刚刚放学回家的 Hankson 正在思考一个有趣的问题. 今天在课堂上,老师讲 ...

  9. 1341 - Aladdin and the Flying Carpet ---light oj (唯一分解定理+素数筛选)

    http://lightoj.com/volume_showproblem.php?problem=1341 题目大意: 给你矩形的面积(矩形的边长都是正整数),让你求最小的边大于等于b的矩形的个数. ...

随机推荐

  1. 后台传Map到ftl

    userInfo是后台传过来的Map <#list userInfo?keys as key> <tr > <td class="case_id" d ...

  2. excel导出工具

    介绍 excel导出工具 整个项目的代码结构如下 com \---utils +---demo # 案例相关 | | ExcelExportApplication.java # springboot启 ...

  3. 关于php缓存技术一些见解

    参考的网站[很重要] ①.模拟高并发: https://blog.csdn.net/yxwb1253587469/article/details/50572927 https://blog.csdn. ...

  4. JavaScript高级知识点整理

    一.JS中的数组 1.数组的三种定义方式 (1).实例化对象 var aArray=new Array(1,2,3,4,5); (2).快捷创建 var aTwoArray = [1,2,3,&quo ...

  5. NOIP2018初赛总结(提高组)(试题+答案+简要解析)

    NOIP2018初赛总结(提高组) 更新完毕(纯手敲),如果有错误请在下面留言 单选题 T1.下列四个不同进制的数中,与其它三项数值上不相等的是 A.\((269)_{16}\) B.\((617)_ ...

  6. 【三支火把】--- shell脚本中变量的类型及作用域

    一直对shell脚本有一种特殊的感觉,因此花了一段时间学习,本人擅长C语言编程,深受C语言荼毒,在学习其他任何类似于编程语言的东东的时候,都会不自觉的与C进行对比,因此对于shell中的变量的作用域一 ...

  7. DoS(拒绝服务攻击)与DDoS(分布式拒绝服务攻击)

    SYN Flood是当前最流行的DoS(拒绝服务攻击)与DDoS(分布式拒绝服务攻击)的方式之一,这是一种利用TCP协议缺陷,发送大量伪造的TCP连接请求,从而使得被攻击方资源耗尽(CPU满负荷或内存 ...

  8. Centos7安装MySQL8.0

    请到这个地址看:https://www.cnblogs.com/kevingrace/p/10482469.html Centos7安装MySQL8.0 - 操作手册 一.yum安装方式: 卸载之前版 ...

  9. zabbix_get命令不存在

    yum install zabbix-get.x86_64

  10. 小程序渲染问题:ios显示安卓不显示

    问题描述: 测试库转到正式库后添加数据,小程序数据渲染不出来,但是测试库没问题,ios数据能显示,没问题,但是安卓显示没数据. 排除是服务器https证书问题,如果是证书问题,小程序会直接调不了接口. ...