#include<bits/stdc++.h>
using namespace std;
const int M=20010;
int b[M],e[M];
vector<int>prime;
void ss(int n){
int i,j;
b[1]=1;
for(i=2;i<=n;i++)
if(b[i]==0)//==0就是素数 ==1就不是
for(j=i*i;j<=n;j+=i)
b[j]=1;
for(i=1;i<=n;i++)
if(b[i]==0)
prime.push_back(i);
}
void add(int n,int d){
int i,j,t;
for(i=1;i<=n;i++){
t=i;
for(j=0;j<prime.size();j++){
while(t%prime[j]==0){
t/=prime[j];
e[j]+=d;
}
if(t==1)break;
}
}
}
int main(){
int p,q,r,s,i;
double ans;
ss(10000);
while(scanf("%d%d%d%d",&p,&q,&r,&s)==4){
memset(e,0,sizeof(e));
if(q>p/2)q=p-q;
if(s>r/2)s=r-s;
add(p,1);
add(q,-1);
add(p-q,-1);
add(r,-1);
add(s,1);
add(r-s,1);
ans=1;
for(i=0;i<=prime.size();i++)
ans*=pow(prime[i],e[i]);
printf("%.5lf\n",ans);
}
return 0;
}UVA 10375 Choose and divide 唯一分解定理
最新推荐文章于 2020-02-24 15:05:28 发布
本文介绍了一种使用素数筛法进行高效素数判断的方法,并结合动态更新的组合计数策略解决特定数学问题。通过预先计算素数并利用这些信息快速计算涉及多个变量的复杂组合表达式。
269

被折叠的 条评论
为什么被折叠?



