zoukankan      html  css  js  c++  java
  • UVA 10375 Choose and divide【唯一分解定理】

    题意:求C(p,q)/C(r,s),4个数均小于10000,答案不大于10^8

    思路:根据答案的范围猜测,不需要使用高精度。根据唯一分解定理,每一个数都可以分解成若干素数相乘。先求出10000以内的所有素数,用a数组表示唯一分解式中个素数的指数,求出每个分子部分的素因子,并且相应的素数的指数加一。分母则减一。最后求解唯一分解式的值。

    #include<stdio.h>
    #include<string.h>
    #include<math.h>
    const int N=1e4+11;
    int pr[N],p[N],a[N],cnt;
    void init(){
        for(int i=2;i<N;i++){
            if(!p[i])    pr[++cnt]=i;
            for(int j=1;j<=cnt&&i*pr[j]<N;i++){
                p[pr[j]*i]=1;
                if(i%pr[j]==0)    break;
            }
        }
    }
    void er(int n,int d){
        for(int i=1;i<=cnt;i++){
            if(n%pr[i]==0){
                while(n%pr[i]==0){
                    a[i]+=d;
                    n/=pr[i];
                }
            }
            if(n==1)    break;
        }    
    }
    void add(int n,int d){
        for(int i=1;i<=n;i++){
            er(i,d);
        }
    } 
    int main(){
        init();
        int p,q,r,s;
        while(~scanf("%d%d%d%d",&p,&q,&r,&s)){
            memset(a,0,sizeof(a));
            add(p,1);add(q,-1);add(p-q,-1);
            add(r,-1);add(s,1);add(r-s,1);
            double ans=1.0;
            for(int i=1;i<=cnt;i++)
                ans*=pow(pr[i],a[i]);
            printf("%.5f
    ",ans);
        }
        return 0;
    } 
  • 相关阅读:
    关于闭包的一些知识
    浏览器解析JavaScript原理(1)
    函数作用域及函数表达式
    jquery
    前端常用插件
    Git及GitHub
    angular框架
    express
    ES6基础
    Node.js相关总结
  • 原文地址:https://www.cnblogs.com/L-King/p/5758001.html
Copyright © 2011-2022 走看看