Pebble Coding

ソフトウェアエンジニアによるIT技術、数学の備忘録

SageMath 入門

ほぼpythonと同じ構文と考えておけばよいです。

100未満の素数を出力する

sage: x = 1
sage: while x < 100:
....:     if x.is_prime():
....:         print(x)
....:     x = x + 1
....: 
2
3
5
7
11
13
17
19
23
29
31
37
41
43
47
53
59
61
67
71
73
79
83
89
97

プログラムをファイルに書きそれを実行する。

$ sage ./a.sage

 F_{q},  y^{2} = x^{3} + 7 のqが1000未満の素数で、有理点の数が素数になるもののリストを求める。

i = 11
while i < 1000:
    if i.is_prime():
        E = EllipticCurve(GF(i), [0, 7])
        p = E.cardinality()
        if p.is_prime():
            print i, p
    i = i + 1
13 7
43 31
61 61 -> anomalous
67 79
79 67
97 79
127 127 -> anomalous
163 139
211 199
349 313
397 397 -> anomalous
433 397
547 547 -> anomalous
577 613
733 691
823 829
907 967
967 907
991 1009

ちなみにここでq = #Eになっているものがありますが、この時anomalous曲線と呼ばれています。
anomalous曲線のDLP問題は、SSSA攻撃という攻撃方法に弱いことが知られています。
anomalous曲線のフロベニウストレースは1です。

参考

http://fe.math.kobe-u.ac.jp/MathLibre-doc/ponpoko/sage_for_newbies_ja.pdf