质因数分解:
id=19601" class="login ui-button ui-widget ui-state-default ui-corner-all ui-button-text-only" style="display:inline-block; position:relative; padding:0px; margin-right:0.1em; vertical-align:middle; overflow:visible; text-decoration:none; font-family:Verdana,Arial,sans-serif; border:1px solid rgb(211,211,211); color:blue; font-size:12px!important">Submit Description Problem D: Choose and divideThe binomial coefficient C(m,n) is defined as m! Given four natural numbers p, q, r, and s, compute the the result of dividing C(p,q) by C(r,s). The InputInput consists of a sequence of lines. Each line contains four non-negative integer numbers giving values for p, q, r, and s, respectively, separated by a single space. All the numbers will be smaller than 10,000 with p>=q and r>=s. The OutputFor each line of input, print a single line containing a real number with 5 digits of precision in the fraction, giving the number as described above. You may assume the result is not greater than 100,000,000. Sample Input10 5 14 9 Output for Sample Input0.12587 Source
Root :: AOAPC II: Beginning Algorithm Contests (Second Edition) (Rujia Liu) :: Chapter 10. Maths :: Examples
Root :: AOAPC I: Beginning Algorithm Contests (Rujia Liu) :: Volume 6. Mathematical Concepts and Methods Root :: Competitive Programming 2: This increases the lower bound of Programming Contests. Again (Steven & Felix Halim) :: Mathematics :: Combinatorics :: option=com_onlinejudge&Itemid=8&category=405" style="color:blue; text-decoration:none">Binomial Root :: Competitive Programming 3: The New Lower Bound of Programming Contests (Steven & Felix Halim) :: Mathematics :: Combinatorics :: Binomial Coefficients Root :: Competitive Programming: Increasing the Lower Bound of Programming Contests (Steven & Felix Halim) :: Chapter 5. Mathematics :: Combinatorics Root :: Prominent Problemsetters :: Gordon V. Cormack |
#include <iostream>
#include <cstring>
#include <cstdio>
#include <algorithm> using namespace std; const int maxn=10010; int p,q,r,s; int prime[maxn],pn;
long long int fnum[maxn],pnum[maxn];
bool vis[maxn]; void pre_init()
{
memset(vis,true,sizeof(vis));
for(int i=2; i<maxn; i++)
{
if(i%2==0&&i!=2) continue;
if(vis[i]==true)
{
prime[pn++]=i;
for(int j=2*i; j<maxn; j+=i)
{
vis[j]=false;
}
}
}
} void fenjie_x(int x,long long int* arr)
{
for(int i=0; i<pn&&x!=1; i++)
{
while(x%prime[i]==0)
{
arr[i]++;
x/=prime[i];
}
}
} void fenjie(int x,long long int* arr)
{
for(int i=2; i<=x; i++)
fenjie_x(i,arr);
} void jianshao()
{
for(int i=0; i<pn; i++)
{
long long int Min=min(fnum[i],pnum[i]);
fnum[i]-=Min;
pnum[i]-=Min;
}
} int main()
{
pre_init();
while(scanf("%d%d%d%d",&p,&q,&r,&s)!=EOF)
{
memset(pnum,0,sizeof(pnum));
memset(fnum,0,sizeof(fnum));
fenjie(p,pnum);fenjie(s,pnum);fenjie(r-s,pnum);
fenjie(q,fnum);fenjie(r,fnum);fenjie(p-q,fnum);
jianshao();
double ans=1.;
for(int i=0; i<pn; i++)
{
while(pnum[i]--)
{
ans*=1.*prime[i];
}
while(fnum[i]--)
{
ans/=1.*prime[i];
}
}
printf("%.5lf\n",ans);
}
return 0;
}
版权声明:来自: 代码代码猿猿AC路 http://blog.csdn.net/ck_boss