已知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位小數
根據唯一分解定理,n!可以分解為若干個質數相乘。
模擬分解這個式子
#include
using
namespace
std;
#define maxn 10000+10
int vis[maxn];
int e[maxn];
vector
primes;
void init()//計算10000以內的素數
int p,q,r,s;
void add_integer(int n,int d)
if(n==1) break;
}}void add_factorial(int n,int d)
int main()
printf("%.5lf\n",ans);
}return
0;}
用組合公式,一邊乘一邊除即可,注意c(10,4)==c(10,6),這種類似情況我們求c(10,4)即可。
#include
using
namespace
std;
int main()
if(i<=s)
}printf("%.5lf\n",ans);
}return
0;}
UVa10375(唯一分解定理)
例題10 3 選擇與除法 choose and divide,uva10375 已知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 輸出保證不超過108,保留5位小數。分析 本題正是唯一分解定理的用武之地。組合數c m,n...
UVA 10375 唯一分解定理
題意 求c m,n c r,s 思路 先對素數打表,構造階乘的素數,設定乙個e陣列用來儲存素數對應序號i的個數,階乘作為分子是 1,作為分母是 1,最後計算的時候直接ans pow 素數,對應的個數 即可 includeusing namespace std define inf 0x3f3f3f3...
uva10375 選擇與除法 唯一分解定理
對數進行分解方便有效的約分。唯一分解定理 乙個數總是有素數的乘積構成。include include include include include using namespace std const int maxn 10000 vector primes int e maxn 乘以或除以n.d ...