2016-11-05 60 views
1

我有1个编程的问题,要求之间找到数数(1和x)是整除 由2和3 + 5 2 + 3和因子和因子的5没有找到除数

因素

我解决它,ALGO是如下─

Total count of nos between 1 and x= sum of (
no of factor of x by '2 and factor of 2'=x/2 
no of factor of x by '3 and factor of 3'=x/3 
no of factor of x by '5 and factor of 5'=x/5) -common number 

现在的问题是在这里如何获取包含在上述计算中那些常见的数字。 说,例如 我要找到的任何1和30 之间计数是整除上述3以及它们的因子然后

For 2 numbers are ->2,4,6,....30 
For 3 numbers are ->3,6,9...30 
For 5 numbers are ->5,10,15...30 

看到这里我已经在每种情况下计算30,所以我必须删除这个计算如何做一个大的x值 请帮助

回答

0

让我们先关注2和3。说,x = 30。现在,让我们找出哪些号码重复,

Factors of 2 under 30: 2, 4, 6, 8, 10, 12, ..., 30 
Factors of 3 under 30: 3, 6, 9,  12, ..., 30 

我们可以看到,整除双方2和3的号码(即,由6整除)正在重复在两个系列。所以,我们必须从答案中扣除它们,因为我们将这些数字计算两次。因此,2和3的答案是:((x/2)+(x/3) - (x /(2 * 3)))。

我希望,这里有足够的提示来解决2,3,5问题。请询问是否需要更多说明。编号: 这种技术实际上被称为inclusion-exclusion principle

+0

thnks为comment.here问题是,如果我会做同样的用2,3,5然后有问题说的2,3, 5我会做(x/2)+(2/3)+(x/5) - (x /(2 * 3)) - (x /(2 * 3 * 5))。看到这里,我已经删除了30例(x /(2 * 3))和(x /(2 * 3 * 5)) – Vksgh

+0

啊,你差不多就是犯了一点错误。如果你注意到,你会看到10重复了两次,都是2和5的因子。也就是说,我们不得不放弃那些可以被(2 * 5)整除的数字。 (3/5)同样如此。我们也不得不放弃这些数字。 但是随后出现了一个新问题,(2 * 3 * 5)= 30,这些问题出现在三个系列中。我们已经删除了三次。所以,我们再次加回来。 请检查[this](https://en.wikipedia.org/wiki/Inclusion%E2%80%93exclusion_principle)以更好地理解它。 – halfo

0

让我们考虑从1到x的所有数字作为一个集合。通过2,3,5

enter image description here

整除,其中没有一个:该组可分为子集。这些集合相交。你的方法很好,但需要稍微改变。您还应该计算同时有2个和3个同时计算多少个数字,2个和5个等。当您确信您可以用数字完美填充此图时,您就可以编写代码。

例如,您可以立即填满x/30的三个集合的交集。走这条路(记住,这是地板每一次!):

enter image description here

+0

它不是'x/6 - x/30'而不是'x/15 - x/30'吗? –

+0

@User_Targaryen当然应该... – xenteros

+0

@User_Targaryen纠正。 – xenteros