Choose and divide (分解質因子,組合數相除)
題意:
已知p,q,r,s。求C(p,q) / C(r,s)。
演算法:
利用組合數的計算公式
m! C(m,n) = -------- n!(m-n)!
可以得到C(p,q) = p!/(q!*(p-q)!) * = p*(p-1)*(p-2)*...*(p-q+1)/q!
C(r,s) = r!/(s!*(r-s)!) = r*(r-1)*(r-2)*...*(r-s+1)/s!
則C(p,q) / C(r,s) = p*(p-1)*(p-2)*...*(p-q+1)*s!/ [r*(r-1)*(r-2)*...*(r-s+1)*q!]
把分子分母中的每個數分解質因子,分子中的數分解的質因子對應個數+1,分母中的-1。
這實際上就是一個約分的過程。
然後計算最後結果,對於所有的質因子,如果個數>0,則乘;個數<0,則除。
===========================================================
一般處理組合數學問題的策略就是能約分的先約分,能化簡的先化簡,能除的先除,
不要全部乘起來再除掉
這篇題解寫得好贊~\(≧▽≦)/~
#include<cstdio> #include<iostream> #include<cstring> #define maxn 10005 using namespace std; int c[maxn]; void solve(int x,int f) { for(int i=2;x>1;i++) { if(x%i==0) { while(x>1 && !(x%i)) { c[i]+=f; x/=i; } } } } int main() { int p,q,r,s; while(scanf("%d%d%d%d",&p,&q,&r,&s)!=EOF) { memset(c,0,sizeof(c)); for(int i=p;i>=p-q+1;i--) solve(i,1); for(int i=s;i>=1;i--) solve(i,1); for(int i=r;i>=r-s+1;i--) solve(i,-1); for(int i=q;i>=1;i--) solve(i,-1); double ans = 1; for(int i=2;i<=maxn;i++) { if(c[i]>0) { for(int j=1;j<=c[i];j++) ans*=i; } else { c[i] = -c[i]; for(int j=1;j<=c[i];j++) ans/=i; } } printf("%.5lf\n",ans); } return 0; }
相關推薦
Choose and divide (分解質因子,組合數相除)
題意: 已知p,q,r,s。求C(p,q) / C(r,s)。 演算法: 利用組合數的計算公式 m! C(m,n) = -------- n!(m-n)! 可以得到C(p,q) = p!/(q!*(p-q)!) * = p*(p-
UVa 10375 - Choose and divide(唯一分解定理)
ide clas 數組 AI AS lin buffered ring buffere 鏈接: https://uva.onlinejudge.org/index.php?option=com_onlinejudge&Itemid=8&page=show_p
UVa 10375 Choose and divide (唯一分解定理)
divide include n! reg pan gist inline har class 題目 題目大意 已知\(C(m, n) = m! / (n!(m - n)!)\), 輸入整數\(p\), \(q\), \(r\), \(s\)(\(p ≥ q\), \(r
uva10375 Choose and Divide(唯一分解定理)
題意:已知C(m,n)=m! / (n!*(m-n!)),輸入整數p,q,r,s(p>=q,r>=s,p,q,r,s<=10000),計算C(p,q)/C(r,s)。輸出保證不超過10^8,保留5位小數 解題思路: 初步分析,本題時間上基本上沒有太大的限
NOIP--最大公約數和最小公倍數(數論,分解質因子)
題目描述輸入二個正整數x0,y0(2<=x0<100000,2<=y0<=1000000),求出滿足下列條件的P,Q的個數條件:1.P,Q是正整數2.要求P,Q以x0為最大公約數,以y0為最小公倍數.試求:滿足條件的所有可能的兩個正整數的個數.輸入輸出格式輸入格式:二個正整數x0,y0
【數論】Choose and Divide, UVa10375 【組合數學】【唯一分解定理】【精度】
唯一分解定理 #include<bits/stdc++.h> using namespace std; int p,q,r,s,prime[10005],cnt,e[10005];boo
【UVA】10375-Choose and divide(組合數化簡)
根據定義每個數肯定能化成這樣的形式: p1^a * p2 ^ b * p3 ^ c ……,這裡 p1,p2,……pn都是素數 先快速打出素數表,之後統計沒個素數出現個個數就可以了 14024226 10375 Accepted C++ 0.325 2014-0
uva 10375 Choose and Divide
ans std ble 遍歷 bre color ios 素數 and 將要求的數離散為素數的指數,然後遍歷一遍素數表。。。。 #include <cstdio> #include <iostream> #include <cstring&g
Choose and Divide UVa10375 題解
質因數 void ostream cto back 直接 -1 display pla 兩個超大組合數相除。解法是分解質因數,用數組記錄每個質因數稱或除的次數,最後直接遍歷數組計算即可 #include<iostream> #include<cst
Choose and divide UVA - 10375
cstring div n) define all inpu small you sample Choose and divide UVA - 10375 The binomial coefficient C(m, n) is defined as C(m, n) = m
階乘分解質因子指數和
print ber bsp star input blog integer pri num The factorial function, n! = 1·2·...·n, has many interesting properties. In this problem, w
BZOJ 1025 [SCOI2009]遊戲 (DP+分解質因子)
題意: 若$a_1+a_2+\cdots+a_h=n$(任意h<=n),求$lcm(a_i)$的種類數 思路: 設$lcm(a_i)=x$, 由唯一分解定理,$x=p_1^{m_1}+p_2^{m_2}+\cdots+p_{tot}^{m_{tot}}$ 設$b_i=p_i^{m_i}$,
【只含質因子的數】(2018)第九屆藍橋杯省賽 C/C++ A組(第四題)
第四題 題目標題:第幾個幸運數到x星球旅行的遊客都被髮給一個整數,作為遊客編號。x星的國王有個怪癖,他只喜歡數字3,5和7。國王規定,遊客的編號如果只含有因子:3,5,7,就可以獲得一份獎品。我們來看前
菜鳥系列——pollard_rho分解質因子
菜鳥就要老老實實重新學起: pollard_rho分解質因子: 利用miller-rabin和pollard_rho演算法進行大素數判斷和素因子分解。 模版: long long factor[1000];//質因數分解結果(剛返回時是無序的) int sum;//質因數的
POJ3421 X-factor Chains【分解質因子+組合數學】
題意簡述:輸入正整數x,求x的因子組成的滿足任意前一項都能整除後一項的序列的最大長度,以及所有不同序列的個數。 問題分析: 首先要對x進行因子分解。這樣可以得到總的因子個數c,不同的因子為f1,f2,...,fn其次方數分別為e1,e2,...,en。那麼,不同序列的個數
UVA 10375 Choose and divide(組合數學)
Problem D: Choose and divide The binomial coefficient C(m,n) is defined as m! C(m,n) = -------- n!(m-n)! Given four
Choose and divide(數論)(組合數學)
題目大意:給出 p ,q, r, s這四個數,C(m, n) = m! / (m − n)! n! ,讓你求解 C(p, q)by C(r, s) ,即兩個階乘相除。 思路:( p!*
java 藍橋杯 分解質因子
問題描述 求出區間[a,b]中所有整數的質因數分解。 輸入格式 輸入兩個整數a,b。 輸出格式 每行輸出一個數的分解,形如k=a1*a2*a3...(a1<=a2<=a3...,k也是從小到大的)(具體可看樣例) 樣例輸入 3 10
HDU 4135 Co-prime (容斥+分解質因子)
16px target 所有 val 容斥 http namespace printf tar <題目鏈接> 題目大意: 給定區間[A,B](1 <= A <= B <= 10 15)和N(1 <=N <= 10 9),求出
等式(分解質因子求因子個數)
連結:https://www.nowcoder.com/acm/contest/90/F來源:牛客網時間限制:C/C++ 1秒,其他語言2秒空間限制:C/C++ 32768K,其他語言65536K 64bit IO Format: %lld題目描述 給定n,求1/x + 1