UVA-10375 唯一分解定理
#include<iostream> #include<string.h> #include<algorithm> #include<math.h> #include<stdio.h> #define rep(i,j,k) for(int i=j;i<=k;i++) using namespace std; const int N = 10007; bool is_prime[N]; int prime[N]; int cnt=0; void get_prime(){ int m=sqrt(N); memset(is_prime,0,sizeof(is_prime)); rep(i,2,m){ if (!is_prime[i]){ for (int j=i*i;j<=N;j+=i){ is_prime[j]=1; } } } rep(i,2,N){ if (is_prime[i]==0){ prime[cnt++]=i; } } } int e[N]; void add_integer(int num,int d){ for (int i=0;i<cnt;i++){ while(num%prime[i]==0){ num/=prime[i]; e[i]+=d; } if (num==1)break; } } void add_factorial(int n,int d){ for(int i=1;i<=n;i++) add_integer(i,d); } int main(){ int p,q,r,s; get_prime(); while(~scanf("%d%d%d%d",&p,&q,&r,&s)){ memset(e,0,sizeof(e)); add_factorial(p,1); add_factorial(q,-1); add_factorial(p-q,-1); add_factorial(r,-1); add_factorial(s,1); add_factorial(r-s,1); int maxx = max(r,p); double ans=1; for (int i=0;i<=maxx;i++){ ans*=pow(prime[i],e[i]); } printf("%.5f\n",ans); } return 0; }
有不懂欢迎咨询
QQ:1326487164(添加时记得备注)