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

唯一分解定理:任何一个大于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. ubuntu16.04.2安装tftp服务器

    1.安装 $ apt-get install tftp-hpa tftpd-hpa tftp-hpa是客户端 tftpd-hpa是服务器 2.创建目录 $ mkdir /tftpboot 这是创建tf ...

  2. jquery('tr','div')和jquery('tr,div')

     jQuery('tr', 'div') 等价于 $('tr', 'div')    表示div里面寻找tr    jQuery('tr, div') <=> $('tr, div') 表 ...

  3. HTTP 协议 -- 基础

    概述 HTTP 是基于 TCP/IP 协议的应用层协议,它不涉及数据包(packet)的传输,主要是规定客户端和服务器之间的通信格式,默认使用 80 端口.   HTTP 协议最早版本是 HTTP/0 ...

  4. w2008 R2 401 - 未授权: 由于凭据无效,访问被拒绝。

    1.打开服务器的"IIS信息服务管理器"-->选择你发布的网站-->选择功能视图中的"身份验证"-->右键匿名身份验证,选择"编辑& ...

  5. 写一个Android输入法01——最简步骤

    本文演示用Android Studio写一个最简单的输入法.界面和交互都很简陋,只为剔肉留骨,彰显写一个Android输入法的要点. 1.打开Android Studio创建项目,该项目和普通APP的 ...

  6. Educational Codeforces Round 60 (Rated for Div. 2)E(思维,哈希,字符串,交互)

    #include <bits/stdc++.h>using namespace std;int main(){ string t; cin>>t; int n=t.size() ...

  7. vue2.0 vs vue1.0

    1.每个组件模板不支持代码片段组件中模板之前<template> <h3>as</h3></template>现在 必须要有根元素 包裹住所有代码< ...

  8. Burp Suite初探

    Burp Suite 是用于攻击web 应用程序的集成平台.它包含了许多工具,并为这些工具设计了许多接口,以促进加快攻击应用程序的过程. 一.安装部署 需要配置java环境,首先安装java,然后配置 ...

  9. P1472 奶牛家谱 Cow Pedigrees

    题意:问你指定二叉树有几种 1.高度为k 2.节点数为n 3.每个点的度为0或2 爆搜------->30分QAQ 首先,因为每个节点度为0或2, 所以如果n是偶数直接输出0就行了吧(嘿嘿) 如 ...

  10. 模板:二维树状数组 【洛谷P4054】 [JSOI2009]计数问题

    P4054 [JSOI2009]计数问题 题目描述 一个n*m的方格,初始时每个格子有一个整数权值.接下来每次有2种操作: 改变一个格子的权值: 求一个子矩阵中某种特定权值出现的个数. 输入输出格式 ...