2016-11-05 75 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