首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >每个数的铜币数

每个数的铜币数
EN

Stack Overflow用户
提问于 2019-11-15 05:30:12
回答 1查看 256关注 0票数 3

最近,我在招聘挑战中遇到了这个问题:

给定一个区间L, R,我们需要告诉L,R中每一个K在区间L,R中K的个数。

例如L= 3,R=7

对于K= 3,3,7=3 (4,5,7)

K= 4,3,7=3 (3,5,7)

对于K= 5,3,7=4 (3,4,6,7)中的铜数

..。

用我的方法,我在R之前找到素数,然后用它的素数因子,计数互质数,但是我需要更好更有效的方法。提前谢谢。

EN

回答 1

Stack Overflow用户

回答已采纳

发布于 2019-11-15 07:21:54

一种办法是:

对于每一个数字K,执行以下步骤:

inclusion-exclusion原理计算L,R区间中的数,它是D中至少一个数的倍数,这个数表示与K.

  • 不同质的数的计数,在this answer (我的)中可以看到更多关于包含排斥方法的详细信息。涉及任意集合D(不一定包含素数)的问题的subset.

  • --在我们的例子中,D包含素数,因此这个答案中的最低公共倍数(lcm)调用可以作为当前

中数字的乘积直接在这里计算。

  1. 最后,为了找出与K的同素数,从L,R区间中的值总数中减去先前找到的数。

注:在第2步中,我们同样可以使用包含排除原理直接计算与K同质的数(然而,我觉得在集合D中计数数的倍数更自然)。这将不再需要步骤3。

票数 4
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/58870869

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档