標籤:

從 1 到 1024 排成一個數除以 9,餘數是多少?


因為 10 X equiv 9X + X equiv X pmod 9

所以 1234...1024 equiv sum_{i=1}^{1024}i pmod 9

因為 連續9個整數和必然被9整除

1024 equiv 1+0+2+4 equiv 7 pmod 9

所以 sum_{i=1}^{1024} i equiv sum_{i=1}^{7} i pmod 9

1+2+3+4+5+6+7 equiv 1 + (2+7) + (3+6) + (4+5) equiv 1 pmod 9

證明 連續9個整數和必然被9整除

因為 -4 + -3 + -2 + -1 + 0 + 1 + 2 + 3 + 4 equiv 0 pmod 9

任意連續9個整數的和,必然和這列數差9的倍數


除了 @成成小 所講的,還可以更簡單些

(a…ab…b) % 9 = (a…a + b…b)%9

即"從1到1024排成一個數除以9餘數"等於「從1加到1024的累積和除以9的餘數」

即[ (1+1024)*1024/2]%9

用計算器算出(1+1024)*1024/2為524800

524800%9 == (5+2+4+8+0+0)%9 == (2+8)%9 == 1%9 == 1


&>&>&> sum(map(sum, map(lambda x: map(int, x), map(list, map(str, range(1, 1024 + 1)))))) % 9
1


那個鏈接到百度知道的回答其實還是有點麻煩,不需要統計各個數碼出現次數的。

既然一個數除以9的餘數跟它個數碼之和除以9的餘數相等(這是除以9餘數的性質),那麼就可以進行這樣的運算:

(箭頭表示除以9餘數相同)

123456789101112131415……1024

-&>1+2+3+4+5+6+7+8+9+1+0+1+1+1+2+1+3+1+4+1+5+……+1+0+2+4

-&>1+2+3+4+5+6+7+8+9+(1+0)+(1+1)+(1+2)+(1+3)+(1+4)+(1+5)+……+(1+0+2+4)--------(*)

-&>1+2+3+4+5+6+7+8+9+10+11+12+13+14+15+……+1024

-&>sum_{1}^{1024}{x}

-&>512x1025

-&>8x8

-&>64

-&>1

也就是說這個數除以9的餘數為1。

其中(*)那一步和它之後的那一步跟鏈接到百度知道的答案不同,這樣不需要統計各數碼出現次數,算是大大簡化了一下過程~


這些小事,交給 Python 去算就好了。

答案是 1

#coding:utf-8
num = ""
for i in range(1,1025):
num += str(i)
print int(num)%9


首先,你要知道這個 一個數除以9的餘數跟它個個數之和除以9的餘數相等。

所以1024除以9等於7除以9的餘數

等於7,把1024包括在內的最後七個數寫出來

1018.1019.1020.1021.1022.1023.1024.

這些數的數字相加,結果是46

46除以9餘

……1……

這就是結果


這。。之前有人問 為什麼所有位加起來除以3的餘數 等於這個數除以3的餘數

你難道沒看么


1+2+3+4+…+1024

=(1024×1025)/2 /*等差數列求和*/

= 512×1025

∴ (1+2+3+4+…+1024)/9

=(512×1025)/9

=(512/3)×(1025/3)

512MOD3 = 2

1025MOD3 =2

∴Answer is (2×2)MOD3=1


把1至2010這2010個自然數依次寫下來得到一個多位數123456789.....2010,這個多位數除以9餘數是多少?_百度知道


推薦閱讀:

求解方程時,除了用牛頓法,可否使用梯度下降法?
如何證明一個數的數根(digital root)就是它對9的餘數?
程序員工作後看演算法書有用嗎?效果怎樣?
一道阿里前端筆試題,求思路?
什麼樣的題目解出來可以是這樣的二維碼?

TAG:演算法 |