UVA10375 选择与除法 Choose and divide 题解

题目链接:

https://www.luogu.org/problemnew/show/UVA10375

分析:

这道题可以用唯一分解定理来做。

什么是唯一分解定理?百度即可,这里也简介一下。

对于任意一个自然数,都可以写成一些素数的幂次相乘的结果

比如说, 26 = 13 2 26=13*2 26=132, 30 = 2 3 5 30=2*3*5 30=235.

然后说详细做法:

首先make一个素数表prime,具体怎么做呢?

先用一个模板筛出合数:

for(int i=2;i<=100;i++)
{
	if(vis[i]!=1)
		for(int j=i*i;j<=10000;j+=i)
		vis[j]=1;
}
反正蒟蒻孤陋寡闻,这已经是我知道最快的造表法了

弄出了合数,我们再把每一个素数记到一个vector里

for(int i=2;i<=10000;i++)
	{
		if(vis[i]==0)
		{
			prime.push_back(i);
		}
	}	

这样为了之后循环幂次方便(一次完成,胜造多组数据

之后就套公式

C ( m , n ) = n ! ( m n ) ! m ! C(m,n)=^{m!}_{n!(m-n)!} C(m,n)=n!(mn)!m!

(中间的除号被吞了
用唯一分解来表示每个数,方便约分,因为此题的实质就是解决越界问题。

E n d End End

代码:

#include<cstdio>
#include<cmath>
#include<vector>
#include<cstring>
using namespace std;
int vis[10005];
vector<int>prime;
int e[10005];
void search(int n,int d)
{
	for(int i=0;i<prime.size();i++)
	{
		while(n%prime[i]==0)
		{
			n=n/prime[i];
			e[i]+=d;
		}
		if(n==1)break;
	}
}
void pd(int n,int d)
{
	for(int i=1;i<=n;i++)
	{
		search(i,d);
	}
}
int main()
{
	for(int i=2;i<=100;i++)
	{
		if(vis[i]!=1)
		for(int j=i*i;j<=10000;j+=i)
		vis[j]=1;
	}
	for(int i=2;i<=10000;i++)
	{
		if(vis[i]==0)
		{
			prime.push_back(i);
		}
	}	
	int p,q,r,s;
	while(scanf("%d%d%d%d",&p,&q,&r,&s)==4)
	{
		memset(e,0,sizeof(e));
		pd(p,1);
		pd(q,-1);
		pd(p-q,-1);
		pd(r,-1);
		pd(s,1);
		pd(r-s,1);
		double ans=1;
		for(int i=0;i<prime.size();i++)
		{
			ans*=pow(prime[i],e[i]);
		} 
		printf("%.5lf\n",ans);
	}
	return 0;
} 
全部评论

相关推荐

10-19 10:28
已编辑
西南石油大学 后端工程师
团孝子已上线feeling:面了很多家公司,能感受到目前只有小公司+外包喜欢问八股。大厂虽然也问八股,但是是从实习、项目中进行提问,并且大厂会问很深,面试官也会对你的回答进行思考➕追问,所以准备大厂面试前一定要备好相关资料。对于算法,我做的是codetop前100+力扣hot100+力扣高频150,面试中实感hot100就足够,基本上只要是hot100就秒答。对于项目和八股,我做的也是烂大街的星球项目,八股则是看小林和问ai,自己也写了很多技术博客和画了很多思维导图,并且自己也尝试用嘴巴说出来,不只停留于纸面。运气也很重要,必须要让面试官/HR看到简历才行,所以建议投递时间是下午两点。tl:第一岗位9.9&nbsp;投递9.10&nbsp;一面(一面评价:最近见过最强的大三,结束五分钟后约二面,都晚上九点了不下班吗)9.11&nbsp;二面(三道算法a出两道,反问评价:经验不够等横向,我实习生要啥经验)9.21挂(实习时间过短+其他原因,想要一年实习的,为什么不招个正职)第二岗位10.10投递10.11约面(主管打电话,说看到我之前投递记录了想要我挂qa职进去干后端,同意)10.14&nbsp;一面(无八股,主动说确实很强,意愿很强)10.16&nbsp;oc其余,友邦,东软,东华,惠择,用友oc已拒京东测开一面挂(投后端被测开捞)腾讯测试已拒(投后端被测开捞)ps:表扬惠择的主管面,没怎么问技术(可能是一面面试官沟通过了),全程一起讲大道理,解答了心中很多疑惑,也告诉我以面试官角度来看怎么选候选人,如果可以下次一定选惠择
HeaoDng:美团好像可以触发一面通
点赞 评论 收藏
分享
评论
点赞
收藏
分享

创作者周榜

更多
牛客网
牛客网在线编程
牛客网题解
牛客企业服务