1. 程式人生 > >uva 10375 Choose and Divide

uva 10375 Choose and Divide

ans std ble 遍歷 bre color ios 素數 and

將要求的數離散為素數的指數,然後遍歷一遍素數表。。。。

#include <cstdio>
#include <iostream>
#include <cstring>
#include <queue>
#include <vector>
#include <cmath>
using namespace std;
typedef long long ll;
int prime[10001];
int is_prime[10001];
int ret;
void init()
{
    ret=0;
    memset(is_prime,
0,sizeof(is_prime)); for(int i=2;i<=10000;i++) { if(!is_prime[i]) { prime[ret++]=i; for(int j=i*2;j<=10000;j+=i) is_prime[i]=1; } } } int e[10001]; void add2(int n,int d) { for(int i=0;i<ret;i++) { int temp=prime[i]; while
(n%temp==0) { n/=temp; e[i]+=d; } if(n==1) break; } } void add(int x,int d) { for(int i=1;i<=x;i++) add2(i,d); } int main() { int p,q,r,s; init(); while(cin>>p>>q>>r>>s) { memset(e,0,sizeof(e)); add(p,
1); add(q,-1); add(p-q,-1); add(r,-1); add(s,1); add(r-s,1); double ans=1; for(int i=0;i<ret;i++) { ans*=pow(prime[i],e[i]); } printf("%.5lf\n",ans); } return 0; }

uva 10375 Choose and Divide