uva 10375 选择与除法

来源:互联网 发布:python 3.0 哪些不同 编辑:程序博客网 时间:2024/06/07 05:06

入门经典例题,就不多少了。


/*********************************************** * Author: fisty * Created Time: 2015/2/18 13:44:03 * File Name   : uva10375.cpp *********************************************** */#include <iostream>#include <cstring>#include <deque>#include <cmath>#include <queue>#include <stack>#include <list>#include <map>#include <set>#include <string>#include <vector>#include <cstdio>#include <bitset>#include <algorithm>using namespace std;#define Debug(x) cout << #x << " " << x <<endl#define Memset(x, a) memset(x, a, sizeof(x))const int INF = 0x3f3f3f3f;typedef long long LL;typedef pair<int, int> P;#define FOR(i, a, b) for(int i = a;i < b; i++)vector<int> prime;#define MAX_N 10010int e[MAX_N];void is_prime(){    int n = 10000;    int vis[MAX_N];    Memset(vis, 0);    int m = sqrt(n+0.5);    for(int i = 2;i <= m; i++){        if(!vis[i])            for(int j = i*i;j <= n; j += i){                vis[j] = 1;            }    }    for(int i = 2;i <= n; i++){        if(!vis[i]){            prime.push_back(i);        }    }}void add_intger(int n, int d){    //d = 1 为乘 d 为-1 为除    for(int i = 0;i < prime.size(); i++){        while(n % prime[i] == 0){            n /= prime[i];            e[i] += d;        }        if(n == 1) break;    }}void add_factirial(int n,int d){    for(int i = 1;i <= n; i++){        add_intger(i, d);    }}int main(){    //freopen("in.cpp", "r", stdin);    int p, q, r, s;    is_prime();    while(~scanf("%d%d%d%d", &p, &q, &r, &s)){        Memset(e, 0);        add_factirial(p, 1);           add_factirial(q, -1);        add_factirial(p-q, -1);        add_factirial(r, -1);        add_factirial(s, 1);        add_factirial(r-s, 1);        double ans = 1;        for(int i = 0;i < prime.size(); i++){            ans *= (double)pow((double)prime[i], e[i]);        }        printf("%.5lf\n", ans);    }    return 0;}


0 0