您的位置:首页 > 其它

UVA 10375 唯一分解定理

2016-08-24 02:25 435 查看
Choose and divide

Time Limit: 3000MS  64bit IO Format: %lld & %llu
Submit Status 

uDebug


Description






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;
}
内容来自用户分享和网络整理,不保证内容的准确性,如有侵权内容,可联系管理员处理 点击这里给我发消息
标签: