合数分解 UVA

来源:互联网 发布:软件测试基础方法 编辑:程序博客网 时间:2024/05/19 17:50
//合数分解+组合数计算 #include<iostream>#include<cstdio>#include<cmath>#include<cstring> using namespace std;typedef unsigned long long ll;const int maxn=1e4+5;int dp[maxn],bp[maxn];int al,bl,cl,dl;bool cp[maxn];void pre(){    dp[0]=0;    memset(cp,false,sizeof(cp));    for(int i=2;i<=10000;i++){        if(!cp[i])            dp[++dp[0]]=i;        for(int j=i*i;j<=10000;j+=i)            cp[j]=true;    }}void solve(int a,int b){    for(int i=a;i>=2;i--){        int nl=i;        for(int j=1;j<=dp[0];j++){            while(nl%dp[j]==0)                nl/=dp[j],bp[j]+=b;            if(nl==1)break;        }    }}void dis(){        for(int i=1;i<=dp[0];i++)            cout<<bp[i]<<" ";        cout<<endl;}int main(){    pre();    while(cin>>al>>bl>>cl>>dl){        memset(bp,0,sizeof(bp));        solve(al,1);        solve(al-bl,-1);        solve(bl,-1);        solve(cl-dl,1);        solve(dl,1);        solve(cl,-1);        double ans=1;        for(int i=1;i<=dp[0];i++)            ans*=pow(dp[i],bp[i]);        printf("%.5lf\n",ans);     }    return 0;} 
0 0
原创粉丝点击