2 * Functions and Variables for Number Theory::
5 @c -----------------------------------------------------------------------------
6 @node Functions and Variables for Number Theory, , Number Theory, Number Theory
7 @section Functions and Variables for Number Theory
8 @c -----------------------------------------------------------------------------
10 @c -----------------------------------------------------------------------------
12 @deffn {関数} bern (@var{n})
14 整数@var{n}について@var{n}番目のBernoulli数を返します。
15 @c WELL, ACTUALLY bern SIMPLIFIES, LIKE FACTORIAL -- DO WE WANT TO GET INTO THAT ???
16 @c OR JUST PRETEND IT'S "RETURNED" ???
17 もし@code{zerobern}が@code{false}なら
18 ゼロに等しいBernoulli数は抑制されます。
24 (%i2) map (bern, [0, 1, 2, 3, 4, 5, 6, 7, 8]);
26 (%o2) [1, - -, -, 0, - --, 0, --, 0, - --]
28 (%i3) zerobern: false$
29 (%i4) map (bern, [0, 1, 2, 3, 4, 5, 6, 7, 8]);
30 1 1 1 5 691 7 3617 43867
31 (%o4) [1, - -, -, - --, --, - ----, -, - ----, -----]
32 2 6 30 66 2730 6 510 798
36 @category{Number theory}
40 @c -----------------------------------------------------------------------------
42 @deffn {関数} bernpoly (@var{x}, @var{n})
44 変数@var{x}に関する@var{n}番目のBernoulli多項式を返します。
47 @category{Number theory}
51 @c -----------------------------------------------------------------------------
53 @deffn {関数} bfzeta (@var{s}, @var{n})
55 引数@var{s}に関するRiemannのゼータ関数を返します。
56 戻り値は多倍長浮動小数点(bfloat)です;
57 @var{n}は戻り値の小数点以下の桁数です。
60 @category{Number theory}
61 @category{Numerical evaluation}
65 @c -----------------------------------------------------------------------------
67 @deffn {関数} bfhzeta (@var{s}, @var{h}, @var{n})
69 引数@var{s}と@var{h}に関するHurwitzのゼータ関数を返します。
70 戻り値は多倍長浮動小数点(bfloat)です;
71 @var{n}は戻り値の小数点以下の桁数です。
73 Hurwitzゼータ関数は以下のように定義されます。
76 $$\zeta \left(s,h\right) = \sum_{k=0}^\infty {1 \over \left(k+h\right)^{s}}$$
83 zeta (s,h) = > --------
90 @code{load ("bffac")}はこの関数をロードします。
93 @category{Number theory}
94 @category{Numerical evaluation}
98 @c -----------------------------------------------------------------------------
100 @deffn {関数} burn (@var{n})
102 @var{n}番目のBernoulli数の近似の有理数をを返します。
103 @code{burn}は、(有理)Bernoulli数が
104 まあまあの効率で(超越的)ゼータによって近似できるという観察を利用します。
108 (- 1) 2 zeta(2 n) (2 n)!
109 B(2 n) = ------------------------------------
114 @code{bern}は、返す前にインデックス@var{n}までのBernoulli数すべてを計算するので、
115 @code{burn}は、大きな、孤立した@var{n}(たぶん105以上の@var{n})
116 に対して@code{bern}より効率的かもしれません。
117 @code{burn}は、255よりおおきな偶数@var{n}に対して近似を呼び出します。
118 奇数と255以下の@var{n}に対しては、関数@code{bern}が呼び出されます。
120 @code{load ("bffac")}はこの関数をロードします。@code{bern}も参照してください。
123 @category{Number theory}
127 @c -----------------------------------------------------------------------------
129 @deffn {関数} cf (@var{expr})
131 @var{expr}を連分数に変換します。
134 式の中のオペランドは 代数演算子を組み合わせられます。
135 連分数と平方根は別にして、式の中の因子は整数か有理数でなければいけません。
137 @code{cf}の外側で連分数に関する演算について知りません。
139 @code{listarith}を@code{false}にバインドした後、
141 @code{cf}は、リストとして表現された連分数を返します。
143 連分数@code{a + 1/(b + 1/(c + ...))}は、
144 リスト@code{[a, b, c, ...]}で表現されます。
145 リストの要素@code{a}, @code{b}, @code{c}, ...は、
147 @var{expr}は、 may also contain
148 @code{sqrt (n)}も含むかもしれません。@code{n}は整数です。
150 変数@code{cflength}の値掛ける周期と同じ数の連分数の項を与えます。
153 @code{cfdisrep}が返す代数表現を評価することで、
156 @code{cfexpand}も参照してください。
158 @code{cfdisrep}, @code{cfexpand}, @code{cflength}も参照してください。
164 @var{expr}は、連分数と整数の平方根から成る式です。
167 (%i1) cf ([5, 3, 1]*[11, 9, 7] + [3, 7]/[4, 3, 2]);
168 (%o1) [59, 17, 2, 1, 1, 1, 27]
169 (%i2) cf ((3/17)*[1, -2, 5]/sqrt(11) + (8/13));
170 (%o2) [0, 1, 1, 1, 3, 2, 1, 4, 1, 9, 1, 9, 2]
175 連分数の何周期を代数的無理数のために計算するかを制御します。
179 (%i2) cf ((1 + sqrt(5))/2);
180 (%o2) [1, 1, 1, 1, 2]
182 (%i4) cf ((1 + sqrt(5))/2);
183 (%o4) [1, 1, 1, 1, 1, 1, 1, 2]
185 (%i6) cf ((1 + sqrt(5))/2);
186 (%o6) [1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 2]
190 連分数は、@code{cfdisrep}が返す代数的表現を評価することによって評価されることができます。
194 (%i2) cfdisrep (cf (sqrt (3)))$
196 (%o3) 1.731707317073171
201 @code{cf}の外側で連分数に関する演算について知りません。
204 (%i1) cf ([1,1,1,1,1,2] * 3);
206 (%i2) cf ([1,1,1,1,1,2]) * 3;
207 (%o2) [3, 3, 3, 3, 3, 6]
213 @category{Continued fractions}
217 @c NEEDS CLARIFICATION -- MAKE EXPLICIT HOW list IS RELATED TO a, b, c, ...
218 @c ALSO, CAN list CONTAIN ANYTHING OTHER THAN LITERAL INTEGERS ??
220 @c -----------------------------------------------------------------------------
222 @deffn {関数} cfdisrep (@var{list})
224 連分数@code{[a, b, c, ...]}のリスト表現から、
225 形式@code{a + 1/(b + 1/(c + ...))}の通常の代数式を構成し返します。
228 (%i1) cf ([1, 2, -3] + [1, -2, 1]);
241 @category{Continued fractions}
245 @c -----------------------------------------------------------------------------
247 @deffn {関数} cfexpand (@var{x})
254 (%i1) cf (rat (ev (%pi, numer)));
256 `rat' replaced 3.141592653589793 by 103993/33102 =3.141592653011902
257 (%o1) [3, 7, 15, 1, 292]
262 (%i3) %[1,1]/%[2,1], numer;
263 (%o3) 3.141592653011902
267 @category{Continued fractions}
271 @c -----------------------------------------------------------------------------
273 @defvr {オプション変数} cflength
277 値@code{cflength}掛ける周期として
278 関数@code{cf}が与える連分数の項の数を制御します。
283 (%i2) cf ((1 + sqrt(5))/2);
284 (%o2) [1, 1, 1, 1, 2]
286 (%i4) cf ((1 + sqrt(5))/2);
287 (%o4) [1, 1, 1, 1, 1, 1, 1, 2]
289 (%i6) cf ((1 + sqrt(5))/2);
290 (%o6) [1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 2]
294 @category{Continued fractions}
298 @c -----------------------------------------------------------------------------
300 @deffn {関数} divsum (@var{n}, @var{k})
301 @deffnx {関数} divsum (@var{n})
303 @code{divsum (@var{n}, @var{k})}は、
304 @var{n}の約数の@var{k}乗した和を返します。
306 @code{divsum (@var{n})}は
312 (%i2) 1 + 2 + 3 + 4 + 6 + 12;
314 (%i3) divsum (12, 2);
316 (%i4) 1^2 + 2^2 + 3^2 + 4^2 + 6^2 + 12^2;
321 @category{Number theory}
325 @c -----------------------------------------------------------------------------
327 @deffn {関数} euler (@var{n})
330 @var{n}番目のEuler数を返します。
332 Euler-Mascheroni定数に関しては、@code{%gamma}を参照してください。
335 (%i1) map (euler, [0, 1, 2, 3, 4, 5, 6, 7, 8, 9, 10]);
336 (%o1) [1, 0, - 1, 0, 5, 0, - 61, 0, 1385, 0, - 50521]
340 @category{Number theory}
344 @c -----------------------------------------------------------------------------
346 @deffn {関数} fib (@var{n})
347 第@var{n}項のFibonacci数を返します。
348 @code{fib(0)}は0に等しく、@code{fib(1)}は1に等しく、
349 @code{fib (-@var{n})}は@code{(-1)^(@var{n} + 1) * fib(@var{n})}に等しい。
352 @code{prevfib}は@code{fib (@var{x} - 1)}、
353 計算された最後の1つ前のFibonacci数に等しい。
356 (%i1) map (fib, [0, 1, 2, 3, 4, 5, 6, 7, 8, 9, 10]);
357 (%o1) [0, 1, 1, 2, 3, 5, 8, 13, 21, 34, 55]
361 @category{Number theory}
365 @c -----------------------------------------------------------------------------
367 @deffn {関数} fibtophi (@var{expr})
369 @var{expr}に関するFibonacci数を
370 定数@code{%phi}を使って表現します。
371 @code{%phi}は、@code{(1 + sqrt(5))/2}, 近似的に1.61803399です。
376 @c fibtophi (fib (n));
377 @c fib (n-1) + fib (n) - fib (n+1);
382 (%i1) fibtophi (fib (n));
385 (%o1) -------------------
387 (%i2) fib (n-1) + fib (n) - fib (n+1);
388 (%o2) - fib(n + 1) + fib(n) + fib(n - 1)
391 %phi - (1 - %phi) %phi - (1 - %phi)
392 (%o3) - --------------------------- + -------------------
393 2 %phi - 1 2 %phi - 1
396 + ---------------------------
403 @category{Number theory}
407 @c -----------------------------------------------------------------------------
409 @deffn {関数} ifactors (@var{n})
413 もし@code{n=p1^e1..pk^nk}が
415 ifactorsは@code{[[p1, e1], ... , [pk, ek]]}を返します。
417 使われる素因数分解法は9973までの素数による試行除算と、
421 (%i1) ifactors(51575319651600);
422 (%o1) [[2, 4], [3, 2], [5, 2], [1583, 1], [9050207, 1]]
423 (%i2) apply("*", map(lambda([u], u[1]^u[2]), %));
428 @category{Number theory}
432 @c -----------------------------------------------------------------------------
434 @deffn {関数} igcdex (@var{n}, @var{k})
436 リスト @code{[@var{a}, @var{b}, @var{u}]}を返します。
437 ここで、 @var{u}は@var{n}と @var{k}の最大公約数で、
438 @var{u}は @code{@var{a} @var{n} + @var{b} @var{k}}に等しいです。
439 引数 @var{n}と @var{k}は整数でなければいけません。
441 @code{igcdex}はユークリッドのアルゴリズムを実装します。
442 @mrefdot{gcdex}も参照してください。
444 コマンド @code{load("gcdex")}はこの関数をロードします。
453 (%i3) igcdex(1526757668, 7835626735736);
454 (%o3) [845922341123, - 164826435, 4]
455 (%i4) igcdex(fib(20), fib(21));
456 (%o4) [4181, - 2584, 1]
460 @category{Number theory}
464 @c -----------------------------------------------------------------------------
466 @deffn {関数} inrt (@var{x}, @var{n})
468 @var{x}の絶対値の整数@var{n}乗根を返します。
471 (%i1) l: [1, 2, 3, 4, 5, 6, 7, 8, 9, 10, 11, 12]$
472 (%i2) map (lambda ([a], inrt (10^a, 3)), l);
473 (%o2) [2, 4, 10, 21, 46, 100, 215, 464, 1000, 2154, 4641, 10000]
477 @category{Number theory}
481 @c -----------------------------------------------------------------------------
483 @deffn {関数} inv_mod (@var{n}, @var{m})
485 @var{m}を法とする@var{n}の逆元を計算します。
486 もし@var{n}が@var{m}を法とするゼロ因子なら、
487 @code{inv_mod (n,m)}は@code{false}を返します。
490 (%i1) inv_mod(3, 41);
492 (%i2) ratsimp(3^-1), modulus=41;
494 (%i3) inv_mod(3, 42);
499 @category{Number theory}
503 @c -----------------------------------------------------------------------------
505 @deffn {関数} isqrt (@var{x})
507 整数 @var{x}の絶対値の「整数平方根」を返します。
510 @category{Mathematical functions}
514 @c -----------------------------------------------------------------------------
516 @deffn {関数} jacobi (@var{p}, @var{q})
518 @var{p}と@var{q}のJacobi記号を返します。
521 (%i1) l: [1, 2, 3, 4, 5, 6, 7, 8, 9, 10, 11, 12]$
522 (%i2) map (lambda ([a], jacobi (a, 9)), l);
523 (%o2) [1, 1, 0, 1, 1, 0, 1, 1, 0, 1, 1, 0]
527 @category{Number theory}
531 @c -----------------------------------------------------------------------------
533 @deffn {関数} lcm (@var{expr_1}, ..., @var{expr_n})
536 引数は、整数はもちろん一般式を取り得ます。
538 @code{load ("functs")}はこの関数をロードします。
541 @category{Number theory}
545 @c -----------------------------------------------------------------------------
547 @deffn {関数} mod (@var{x}, @var{y})
549 もし@var{x}と@var{y}が実数で、@var{y}がゼロでないなら、
550 @code{@var{x} - @var{y} * floor(@var{x} / @var{y})}を返します。
551 さらにすべての実数@var{x}に関して、@code{mod (@var{x}, 0) = @var{x}}が成り立ちます。
552 定義@code{mod (@var{x}, 0) = @var{x}}の議論に関しては、
553 Graham, Knuth, Patashnik著の「コンピュータの数学」の3.4節を参照してください。
554 関数@code{mod (@var{x}, 1)} は、周期が1で@code{mod (1, 1) = 0}、@code{mod (0, 1) = 0}ののこぎり波関数です。
556 複素数の偏角の主値(区間@code{(-%pi, %pi]}での数)を見つけるためには、
557 関数@code{@var{x} |-> %pi - mod (%pi - @var{x}, 2*%pi)}を使います。
560 @var{x}と@var{y}が定数式(例えば、@code{10 * %pi})の時、
561 @code{mod}は、@code{floor}や@code{ceiling}が使うのと同じ多倍長浮動小数点評価スキームを
563 再び同様に、まれですが、@code{mod}は間違った値を返すことがありえます。
565 数値でない引数@var{x}や@var{y}に関して,@code{mod}は、いくつかの式整理規則を知っています:
576 (%i2) mod (a*x, a*y);
583 @category{Mathematical functions}
587 @c -----------------------------------------------------------------------------
589 @deffn {関数} next_prime (@var{n})
591 @var{n}よりも大きな最も小さな素数を返します。
594 (%i1) next_prime(27);
599 @category{Number theory}
603 @c -----------------------------------------------------------------------------
605 @deffn {関数} partfrac (@var{expr}, @var{var})
607 主変数@var{var}に関する部分分数式@var{expr}を展開します。
608 @code{partfrac}は、完全な部分分数分解を行います。
610 部分分数展開(元の分母の因子)の分母は互いに素であるという事実に基づいています。
611 分子は分母の線形結合として書け、結果が展開ということになります。
614 (%i1) 1/(1+x)^2 - 2/(1+x) + 2/(2+x);
616 (%o1) ----- - ----- + --------
621 (%o2) - -------------------
624 (%i3) partfrac (%, x);
626 (%o3) ----- - ----- + --------
632 @c -----------------------------------------------------------------------------
634 @deffn {関数} power_mod (@var{a}, @var{n}, @var{m})
636 @code{a^n mod m}を計算するために
638 ここで、@var{a}と@var{n}は整数で、@var{m}は正の整数です。
639 もし@var{n}が負なら、@code{inv_mod}が剰余逆元を見つけるために使われます。
642 (%i1) power_mod(3, 15, 5);
646 (%i3) power_mod(2, -1, 5);
653 @category{Number theory}
657 @c -----------------------------------------------------------------------------
659 @deffn {関数} primep (@var{n})
662 もし@code{primep (@var{n})}が@code{false}を返すなら、
664 もし@code{true}を返すなら、@var{n}は非常に高い確立で素数です。
666 3317044064679887385961981より小さな@var{n}に対して、
667 Miller-Rabinのテストの決定的バージョンが使われます。
668 もし@code{primep (@var{n})}が@code{true}を返すなら、
671 3317044064679887385961981よりの大きな@var{n}に対して、
673 @code{primep_number_of_tests}個のMiller-Rabinの疑似素数テストと
674 1つのLucasの疑似素数テストを使います。
675 @var{n}がMiller-Rabinのテスト1つを通過する確率は
677 @code{primep_number_of_tests}に関してデフォルト値25を使うと、
682 @category{Predicate functions}
683 @category{Number theory}
687 @c -----------------------------------------------------------------------------
688 @anchor{primep_number_of_tests}
689 @defvr {オプション変数} primep_number_of_tests
692 @code{primep}の中で使われるMiller-Rabinのテストの回数。
696 @category{Predicate functions}
697 @category{Number theory}
701 @c -----------------------------------------------------------------------------
703 @deffn {関数} prev_prime (@var{n})
705 @var{n}よりも小さな最大の素数を返します。
708 (%i1) prev_prime(27);
713 @category{Number theory}
717 @c -----------------------------------------------------------------------------
719 @deffn {関数} qunit (@var{n})
721 実二次数体@code{sqrt (@var{n})}の基本単数、
724 これは、結果的にペル方程式@code{a^2 - @var{n} b^2 = 1}を解くことになります。
729 (%i2) expand (% * (sqrt(17) - 4));
734 @category{Number theory}
738 @c -----------------------------------------------------------------------------
740 @deffn {関数} totient (@var{n})
743 @var{n}と互いに素な整数の数を返します。
746 @category{Number theory}
750 @c -----------------------------------------------------------------------------
751 @defvr {オプション変数} zerobern
754 @code{zerobern}が@code{false}の時、
755 @code{bern}はBernoulli数を除外し、@code{euler}はゼロに等しいEuler数を除外します。
756 @code{bern}と@code{euler}を参照してください。
759 @category{Number theory}
764 @c -----------------------------------------------------------------------------
766 @deffn {関数} zeta (@var{n})
769 もし@var{x}が負の整数、0, 1,または、正の偶数なら、
770 Reimannのゼータ関数は厳密な値に整理されます。
772 加えて、オプション変数@code{zeta%pi}は@code{true}でなければいけません。
773 (@code{zeta%pi}を参照してください。)
774 浮動小数点または多倍長浮動小数点数に対して、Reimannゼータ関数は数値的に評価されます。
776 有理非整数、浮動小数点数、複素数の引数を含む
777 他の引数すべてに対して、また、もし@code{zeta%pi}が値@code{false}なら偶数に対して、
778 名詞形@code{zeta (@var{n})}を返します。
780 @code{zeta(1)}は未定義ですが、
781 Maximaは上からと下からの極限@code{limit(zeta(x), x, ,1)}を知っています。
783 @code{bfzeta}と@code{zeta%pi}も参照してください。
789 @c zeta([-2, -1, 0, 0.5, 2, 3,1+%i]);
790 @c limit(zeta(x),x,1,plus);
791 @c limit(zeta(x),x,1,minus);
794 (%i1) zeta([-2, -1, 0, 0.5, 2, 3, 1+%i]);
797 (%o1) [0, - --, - -, - 1.460354508809586, ----, zeta(3),
800 (%i2) limit(zeta(x),x,1,plus);
802 (%i3) limit(zeta(x),x,1,minus);
807 @category{Number theory}
811 @c -----------------------------------------------------------------------------
813 @defvr {オプション変数} zeta%pi
816 @code{zeta%pi}が@code{true}の時、
817 偶数@code{n}に対して、@code{zeta}は@code{%pi^n}に比例する式を返します。
819 偶数@code{n}に対して、@code{zeta}は名詞形@code{zeta (n)}を返します。
836 (%i3) zeta%pi: false$
842 @category{Number theory}