UVA - 10375(唯一分解定理)
阿新 • • 發佈:2018-11-27
#include<iostream> #include<cstdio> #include<cstring> #include<string> #include<algorithm> #include<cmath> using namespace std; const int maxn=1e4+10; int prime[maxn],primey; int e[maxn]; void csh() { memset(prime,1,sizeof(prime)); prime[0]=prime[1]=0; for(int i=2;i<=sqrt(maxn+0.5);i++) { if(prime[i]) { for(int j=i*i;j<=maxn;j+=i) { prime[j]=0; } } } primey=0; for(int i=2;i<=maxn;i++) { if(prime[i]) { prime[primey++]=i; } } }void add(int n,int d) { for(int i=0;i<primey;i++) { while(n%prime[i]==0) { n/=prime[i]; e[i]+=d; } if(n==1)break; } } void fac(int n,int d) { for(int i=1;i<=n;i++) { add(i,d); } } int main() { csh();int p,q,r,s; while(scanf("%d %d %d %d",&p,&q,&r,&s)!=EOF) { memset(e,0,sizeof(e)); fac(p,1); fac(q,-1); fac(p-q,-1); fac(s,1); fac(r-s,1); fac(r,-1); int m=max(q,s); double ans=1; for(int i=0;i<=m;i++) { ans*=pow(prime[i],e[i]); } printf("%.5f\n",ans); } return 0; }