UVA 10375 唯一分解定理

来源:互联网 发布:web前端开发书籍知乎 编辑:程序博客网 时间:2024/06/06 08:50
Choose and divide
Time Limit: 3000MS  64bit IO Format: %lld & %llu

Submit Status uDebug

Description

Download as PDF
Problem descriptions:
System Crawler 2016-08-19


#include"iostream"#include"cstring"#include"math.h"#include"cstdio"using namespace std;int prime[1300];int e[1300];int visit[10005];int ps;int list(){    int cnt=0;    memset(visit,0,sizeof(visit));    for(int i=2;i*i<=10003;i++)    if(!visit[i])    {        for(int j=i*i;j<=10003;j+=i)            if(!visit[j]) visit[j]=1;    }    for(int i=2;i<=10003;i++)        if(!visit[i])        prime[cnt++]=i;    return cnt;}int fuck(int q,int state) //state=1 表示在分子 -1表示在分母{    int i,j;    for(i=1;i<=q;i++)    {        for(j=0;j<ps;j++)        {            if(i/prime[j]==0) break;  //当这个素数已经大于 这一项 就可以跳出循环了            if(i%prime[j]==0)             {                //e[j]+=state;                int t=i;                while(t%prime[j]==0) //这个素数的次数 由他 被余的次数决定                {                    e[j]+=state;                    t/=prime[j];                }            }        }    }}int main(){    int p,q,r,s;ps=list();    while(cin>>p>>q>>r>>s)    {        memset(e,0,sizeof(e));        fuck(p,1);fuck(s,1);fuck(r-s,1);  //分子部分 都是乘        fuck(q,-1);fuck(r,-1);fuck(p-q,-1);//分母部分都是除        double ans=1;int i;        for(i=0;i<ps;i++)            ans*=pow(prime[i],e[i]);        printf("%.5f\n",ans);    }    return 0;}


0 0
原创粉丝点击