您的位置:首页 > 其它

筛法求素数,组合数公式,唯一分解定理(选择与除法,uva 10375)

2016-09-27 10:40 429 查看
#include<bits/stdc++.h>
using namespace std;

bool vis[10010];
vector<int>prm;
int e[1300];
int p,q,r,s;

void init()
{
int m=sqrt(10000+0.5);
for(int i=2;i<=m;i++) if(!vis[i])
for(int j=i*i;j<=10000;j+=i) vis[j]=true;
for(int i=2;i<=10000;i++)
if(!vis[i]) prm.push_back(i);
}

void ai(int n,int d)
{
for(unsigned int i=0;i<prm.size();i++)
{
while(n%prm[i]==0)
{
e[i]+=d;
n/=prm[i];
}
}
}

void af(int n,int d)
{
for(int i=1;i<=n;i++)
ai(i,d);
}

int main()
{
init();
while(scanf("%d %d %d %d",&p,&q,&r,&s)!=EOF)
{
memset(e,0,sizeof(e));
af(p,1);
af(q,-1);
af(p-q,-1);
af(r,-1);
af(s,1);
af(r-s,1);
double ans=1;
for(unsigned int i=0;i<prm.size();i++)
if(e[i])
ans*=pow(prm[i],e[i]);
printf("%.5lf\n",ans);
}
return 0;
}
内容来自用户分享和网络整理,不保证内容的准确性,如有侵权内容,可联系管理员处理 点击这里给我发消息
标签: