回上方

(12)三角數

一定數目的點或圓在等距離的排列下可以形成一個等邊三角形,這樣的數被稱為三角數。

圖片來源:維基百科

比如10個點可以組成一個等邊三角形,因此10是一個三角數。

一開始的10個三角形數是1、3、6、10、15、21、28、36、45、55

T(1)=1

T(2)=1+2=3

T(3)=1+2+3=6

T(4)=1+2+3+4=10

T(5)=1+2+3+4+5=15

T(6)=1+2+3+4+5+6=21

T(7)=1+2+3+3+4+5+6+7=28

利用等差數列總和公式推出三角數第n項T(n)=(n+1)n/2

在三角數列中28是第一個擁有超過5個因數(1,2,4,7,14,28,共6個)

【最後目標】

求第一個超過500個因數的三角數。


練習1:集合

集合(sets)是一組無序且沒有重複的元素。大括號或 set() 函式都可以用來創建集合。(注意:要創建一個空的集合,必須使用set()而不是{})

1
2
3
4
5
6
7
8
a = set('abracadabra')
b = set('alacazam')
print(a) #印出集合a
print(b) #印出集合b
print(a-b) #差集:在集合a中但不在集合b中的元素集合
print(a|b) #聯集:在集合a或在集合b中的元素集合
print(a&b) #交集:在集合a且在集合b中的元素集合
print(a^b) #在集合a或集合b中,但不同時存在兩個集合

練習2:找出第100項三角數

1
2
3
4
def T(number):
    return number * (number + 1) // 2

print(T(100))

練習3:找出100的所有因數及其因數個數

 1
 2
 3
 4
 5
 6
 7
 8
 9
10
11
def factors(number):
    result = set()
    for i in range(1, int(number ** 0.5) + 1):
        div, mod = divmod(number, i)
        if mod == 0 :
            result = result | {i, div}
    return result

factor_set = factors(100)
print(factor_set)
print(len(factor_set))

練習4:找出100的因數中,除了100本身之外最大的因數。

1
2
3
4
5
6
7
8
number = 100
factor = number - 1
while True:
    mod = number % factor
    if mod == 0:
        break
    factor = factor-1
print(factor)

本單元課程自2018.4.23日起已被瀏覽 1254