Project Euler 29

這道題我是用數學方法做的……手算的~


我承認是從答案推導了驗證了手算答案的正確性……


顯然這道題就是用剔除的方法。


顯然2的出現有2^2,2^3,2^4,...,2^100

3的先跳過,看4的

4 = 2^2,出現了2^4,2^6,2^8,...,2^200,其中有多少是和2的重複呢?顯然是100/2 - 2 +1

100/2是再算偶數個數,(-2+1)是因爲從^2開始2,3,4,...,50,總共49個數。

3和9也是這個關係

10和100也是這個關係

2和8也是這個關係,32個重複


以此類推,可以算出

2:49+32+24+19+15

3:49+32+24

4:49+32

5:49

6:49

7:49

8:49

9:49

10:49

後面的平方都大於100,不必考慮了。


這些加起來是619,用99*99(總數)-619 = 9182.這個比正確答案少了一個!哪裏多減了?


顯然16在2^4和4^2處都進行了重複處理

32,64,81也是……

這腫麼辦……


那我們一點點容斥原理算吧……


先分析16:2^4處,-24,  4^2處,-49。2^4的24個全部重複……


想到8還有跟16重複的部分……


我實在不想寫了……


4 --> 49

8 --> 49

9 --> 49

16 --> 58*****

25 --> 49

32 --> 48

36 --> 49

49 --> 49

64 --> 62*****

81 --> 58*****

100 --> 49

It seems that all squares have 49 occurences and all fourth powers have 9 occurences.

其實有所不同的就上面加星號的幾個……手算真的能出來……

直接上python吧……

python實在太過強大……哎……python太強大……太……強大……強……大……


s = {1}
for a in range(2, 101):
	tmp = a
	now = 0
	for b in range(2, 101):
		tmp *= a
		if tmp in s:
			pass
		else:
			now += 1
			s.add(tmp)
	print(a, now)
print(len(s))

這個代碼就是爲了驗證我的想法寫的……重複的並不難找……但是問題就是……不好說明……還是直接代碼吧……

發佈了65 篇原創文章 · 獲贊 0 · 訪問量 4萬+
發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章