10adic指数関数と対数関数

10adic対数関数は「こちら」の定義を採用します。 10adic指数関数$e^x$はべき級数で \[ e^x = \sum_{n=0}^\infty \frac{x^n}{n!} \] と定義します。

10adic指数関数

\[ \sum_{k=0}^n \frac{x^k}{k!} \quad \pmod{10^m} \] を計算し、分子と分母にわけて、分子×(分母の合同式の逆数)として計算します。

tExp(x,n,m):=block(
                f(x,n):=sum(x^k/k!,k,0,n),
                mod(num(f(x,n))*inv_mod(denom(f(x,n)),10^m),10^m)
             );
tExp(100,50,50);

実行結果.

18131597153735653309273180234027821900070921005101

numは分子、denomは分母を取得する命令です。

10adic対数関数

定義をほぼそのまま利用します。

tLog(x,n,m):= (power_mod(x,10^n,10^(n+m))-1)/10^n;
tLog(3,100,100);

実行結果.

2091622745050815564300996166883116727166018267123490019823112848576493439314850693280080844278655220

注意

10adicの世界では、常に \[\exp(\log(x))=x\] が言えるわけではありません。 例えば、 \[\exp(\log(7)) = 7 \cdot\sqrt[4]{1}\] となり、$\sqrt[4]{1}=\cdots2943$ だけずれます。