2017年12月21日木曜日

学習環境

代数系入門 (松坂 和夫(著)、岩波書店)の第1章(整数)、5(素数、素因数分解)、問題17.を取り組んでみる。


  1. 和をとると0になるためには、全ての組に0が必要。

    0 , , x n 1 0 , , x n n

    和をとると整数1となるには、1組だけ1が必要。

    0 , 1 , , x n 1 0 , x 1 m , , x n m

    0から n-1までとるのに1組で n、他の組を。とすれば'、

    0 , 1 , 2 , , n - 1 0 , x 1 m , x 2 m , , x n m

    等比数列の和を考える。

    n - 1 + n - 1 n + + n - 1 n m - 1 = n - 1 n m - 1 + 1 - 1 n - 1 = n m - 1
    0 , 1 , , n - 1 0 , x 1 2 , · · · , n - 1 n 0 , x 1 m , , n - 1 n m - 1

    以上のような考察 を続ければ、

    0 , 1 , , n - 1 0 , n , , n - 1 n 0 , n 2 , , n - 1 n 2 0 , n m - 1 , , n - 1 n m - 1

    とすればいい。

コード(Emacs)

Python 3

#!/usr/bin/env python3

m = 3
n = 4

a = [[j * n ** i for j in range(n)]
     for i in range(m)]

for nums in a:
    print(nums)
print()

for j0 in range(n):
    s0 = a[2][j0]
    for j1 in range(n):
        s1 = s0 + a[1][j1]
        for j2 in range(n):
            print(s1 + a[0][j2], end=' ')
        print()

print(f'{n}^{m} - 1 = {n ** m - 1}')
print()

m = 4
n = 3
a = [[j * n ** i for j in range(n)]
     for i in range(m)]

for nums in a:
    print(nums)
print()
for j0 in range(n):
    s0 = a[3][j0]
    for j1 in range(n):
        s1 = s0 + a[2][j1]
        for j2 in range(n):
            s2 = s1 + a[1][j2]
            for j3 in range(n):
                print(s2 + a[0][j3], end=' ')
            print()

print(f'{n}^{m} - 1 = {n ** m - 1}')

入出力結果(Terminal, Jupyter(IPython))

$ ./sample17.py
[0, 1, 2, 3]
[0, 4, 8, 12]
[0, 16, 32, 48]

0 1 2 3 
4 5 6 7 
8 9 10 11 
12 13 14 15 
16 17 18 19 
20 21 22 23 
24 25 26 27 
28 29 30 31 
32 33 34 35 
36 37 38 39 
40 41 42 43 
44 45 46 47 
48 49 50 51 
52 53 54 55 
56 57 58 59 
60 61 62 63 
4^3 - 1 = 63

[0, 1, 2]
[0, 3, 6]
[0, 9, 18]
[0, 27, 54]

0 1 2 
3 4 5 
6 7 8 
9 10 11 
12 13 14 
15 16 17 
18 19 20 
21 22 23 
24 25 26 
27 28 29 
30 31 32 
33 34 35 
36 37 38 
39 40 41 
42 43 44 
45 46 47 
48 49 50 
51 52 53 
54 55 56 
57 58 59 
60 61 62 
63 64 65 
66 67 68 
69 70 71 
72 73 74 
75 76 77 
78 79 80 
3^4 - 1 = 80
$

0 コメント:

コメントを投稿