Loading [MathJax]/jax/output/CommonHTML/jax.js
ラベル 数学 の投稿を表示しています。 すべての投稿を表示
ラベル 数学 の投稿を表示しています。 すべての投稿を表示

2025年3月4日火曜日

整数のべき乗の下二桁

オイラーの定理・Grok からの続き

問題がわかったようなわからないような場合は,プログラムに落とし込んでもらうほうがありがたい。

Q(koshix):
f(n,m)=mod(n^m,100) と定義します。(n=2,3,...,m=2,3,...)
この関数は最小の出発点をm_0(n)として,最小周期T(n)を持つことがわかっているとします。つまり,f(n,m_0+T(n))=f(n,m_0) です。このとき,m_0(n)とT(n)をnの式で表わすことができますか。できる範囲で構いませんけど。

A(ChatGPT o3-mini-high):
(57秒推論,たぶん正解,以下出力省略,m=2,3,...というのはこちらの入力ミスで,m=1,2,... でなければならないのだけれど,そのあたりは勝手に斟酌して話を進めてくれている。
出発点:m0(n) = ...
周期:T(n) = ...

Q(koshix):
n,mを入力したときに,m0(n)とT(n)を求めるプログラムを作ってください。

A(ChatGPT o3-mini-high):
(できた!)

Q(koshix):
(1) n=0を入れるまで繰り返して入力を促すようにしてください。
(2) 2^2=4, ... 2^22=...4 のように,周期に対応する部分の結果もあわせて出力するようにしてください。

A(ChatGPT o3-mini-high):
(できた!)

import math

def ord25(n):
    """
    n と 25 が互いに素な場合に、25 を法とする乗法群における n の位数を返す。
    すなわち、最小の正整数 k で n^k ≡ 1 (mod 25) となる k。
    可能性のある値は 1, 2, 4, 5, 10, 20(φ(25)=20より)です。
    """
    if n % 5 == 0:
        return None  # n が5の倍数の場合、この関数は使いません
    for k in [1, 2, 4, 5, 10, 20]:
        if pow(n, k, 25) == 1:
            return k
    return 20  # 理論上ここには来ないはず

def compute_m0_T(n):
    """
    与えられた n に対して、f(n, m) = n^m mod 100 の
    出発点 m0(n) と周期 T(n) を計算する関数です。
    
    ・モジュロ4について:
      - n ≡ 2 (mod 4) の場合は、m0,4 = 2(m>=2から定常)
      - それ以外は m0,4 = 1
    ・モジュロ25について:
      - 5で割れるが25で割れない場合は m0,25 = 2(m>=2から0になる)
      - それ以外(すなわち 5と互いに素または25で割れる場合)は m0,25 = 1
      
    最終的な出発点は m0(n)=max(m0,4, m0,25) として計算します。
    
    周期は、各合同式での周期の最小公倍数として
      T(n) = lcm(T4(n), T25(n))
    とし、モジュロ4では
      - 奇数かつ n ≡ 3 (mod 4) の場合は T4 = 2、それ以外は T4 = 1
    また、モジュロ25では
      - n と 25 が互いに素なら ord25(n) を、5で割れる場合は T25 = 1 とします。
    """
    # モジュロ4での出発点
    m0_4 = 2 if n % 4 == 2 else 1

    # モジュロ25での出発点
    m0_25 = 2 if (n % 5 == 0 and n % 25 != 0) else 1

    m0 = max(m0_4, m0_25)

    # モジュロ4での周期 T4:
    T4 = 2 if (n % 2 == 1 and n % 4 == 3) else 1

    # モジュロ25での周期 T25:
    if n % 5 == 0:
        T25 = 1
    else:
        T25 = ord25(n)

    T = (T4 * T25) // math.gcd(T4, T25)
    return m0, T

def main():
    while True:
        try:
            n = int(input("整数 n を入力してください (終了するには 0 を入力): "))
        except ValueError:
            print("整数を入力してください。")
            continue
        
        if n == 0:
            break
        
        m0, T = compute_m0_T(n)
        print(f"\nn = {n} のとき:")
        print(f"  出発点 m0({n}) = {m0}")
        print(f"  周期 T({n}) = {T}")
        print("周期に対応する部分の結果:")
        # m0 から m0+T まで(両端を含む)で f(n, m) = n^m mod 100 の値を出力
        for m in range(m0, m0 + T + 1):
            result = pow(n, m, 100)
            print(f"  {n}^{m} = {result}")
        print("-" * 40)
    
    print("終了しました。")

if __name__ == "__main__":
    main()

======================================================
(出力結果)

整数 n を入力してください (終了するには 0 を入力):  16

n = 16 のとき:
  出発点 m0(16) = 1
  周期 T(16) = 5
周期に対応する部分の結果:
  16^1 = 16
  16^2 = 56
  16^3 = 96
  16^4 = 36
  16^5 = 76
  16^6 = 16
----------------------------------------
整数 n を入力してください (終了するには 0 を入力): 

 

Q(koshix):
このプログラムを利用して,T(n)のn=1...100 までのリスト,m0(n)の1...100までのリストを出力してください。

A(ChatGPT 03-mini-high):
(125秒考察の後,コードとその実行結果のリストを出力してくれた。微妙に欠損していたので,もとのコードを自分で改変して修正出力した。)

図:T(n)とm0(n)のリストプロット(n=1...100)




2025年3月3日月曜日

Grok3

オイラーの定理からの続き

イーロン・マスクが支配しているX(旧Twitter)からはなるべく遠ざかりたい。日本語で自分がフォローしている空間はそこまで荒れていないし,情報量も多いので悩ましいところだ。そのマスクが2023年7月に立ち上げたAI開発企業が xAIだ。 

xAIのチャットボットであるGrokは,Xの有料ユーザ向けに提供されているものだと思って無視していたが,いつの間にか Grok3 ベータ版がXの無料ユーザにも公開されていた。テストを誘導するための一時的な措置だろう。というわけで,この推論モデルの実力を試してみる。



図:Grokのアイコン(どこかから引用)

Tsujimotter が提起していた,「2の200乗の下2桁はいくつか?」の解法7選 にちなんだ問いだ。
Q(koshix):
整数m,nに対して,mod(n^m,100) がm=0,1,…に対して,周期的に振る舞うことを証明し,その周期のはじまるmの値が n によってどのように定まるかを求めてください。

A(Grok3):
124行ほど考えて,微妙に誤りが含まれた生ぬるい回答を返してきた。論理的な推論というよりも,具体的な計算の試行錯誤のような印象を受ける)

A(DeepSeek R1):
371秒かけて中国語で考察した後,ある程度妥当だけれど不完全な回答を中国語で返してきた。日本語に直してとお願いしたら,「服务器繁忙,请稍后再试。」だと。)


A(Gemini 2.0 Flash Thinking Experimental):
253行ほど考えて,あまり整理されていない回答を返してきた。頭悪いのかと思ったが,最後の結論はもしかすると良いのかもしれない。自分自身の理解が不十分なのか?)

A(ChatGPT o3-mini-highl):
37秒かけて日本語で考察した後,もっともらしい整理された答えを返してきた。)

ということで,Grok3は巷の一部の評判ほどのものではないようだ。DeepSeek R1も相変わらずイマイチなので,とりあえず様子見ながら,o3-mini-highを中心に使うのがよろし。

2025年3月2日日曜日

オイラーの定理

フェルマーの小定理オイラーの関数からの続き

大人を過ぎてから初めて目にした概念はなかなか覚えられない。フェルマーの小定理がそれだ。鈴木貫太郎の大学入試数学チャンネルもなくなってしまったので,なおさらだ。

フェルマーの小定理は,素数をpとし,pとたがいに素な整数を a(gcd(a,p)=1)として,ap11(mod p) 。あれれ,gcd(a,p)=1 をはずせば,apa(mod p))でもいいのか。

証明は次のとおり。
整数 a,x,素数pとする。二項定理で(x+1)pを展開すると,
(x+1)p=xp+Cp1xp111+Cp2xp212++Cpp1x11p1+1p
ところで,上式のCpkk=p!k!(pk)!であり,分母のk<p, pk<p には分子の p を割り切る数は含まれていない。したがって,(x+1)pxp+1(mod p) である。

これから,ap(1+(a1))p1+(a1)p(mod p)
ap1+(a1)p1+1+(a2)pa+0p(mod p)
apは互いに素なので,両辺をaで割って,ap11(mod p)

オイラーの定理は,フェルマーの小定理のべきの素数部分を拡張したものに相当する。
正の整数mに対して,集合 r(m)={a | 1am, gcd(a,m)=1} を考え,その要素数をオイラー数 φ(m)=#r(m)  とよんでいる。そこで,r(m)={r1,r2,,rφ(m)}。なお,pに対して,φ(p)=p1

集合 r(m)のすべての要素にaをかけて,mod m をとれば,その集合 ar(m)={ar1,ar2,,arφ(m)}r(m)={r1,r2,,rφ(m)}と等しくなる。そこで,これらの要素の積を考えると,aφ(m)Πφ(m)i=1riΠφ(m)i=1ri(mod m) なので,
オイラーの定理,aφ(m)1(mod m)  が得られる。

(注)なお,ar(m)={ar1,ar2,,arφ(m)}(mod m){r1,r2,,rφ(m)} の要素 ri はすべて,a,mと互いに素であり,同じものは含まれない。

(1) p,qを素数として,m=pq である場合,φ(m)=φ(p)φ(q) となる。
φ(m) は,{1,2,,m}から,pの倍数とqの倍数を除いたものになるので,それぞれ,q個,p個あるが,pqは両方で重なっている。そこで,p,qの倍数でないものの個数は,φ(m)=pqpq+1=(p1)(q1)=φ(p)φ(q) となる。3個以上の場合も同様。

(2) p を素数,kを正整数として,m=pk である場合,φ(m)=pkpk1  となる。これは,{1,2,,pk} の中で,{1p,2p,,pk1p}mと互いに素でないので,その個数を引けばよいからだ。

(3) これらを組み合わせると,m=pk11pk22pknn  として,φ(m)=m(11/p1)(11/p2)(11/pn) となる。


図:オイラーのファイ関数のグラフ(Wikipediaから引用)

[2]オイラーのファイ関数のイメージ(高校数学の物語)

2025年2月16日日曜日

ChatGPT o3-mini(3)

ChatGPT o3-mini(2)からの続き

東京理科大の数学の入試問題が話題になっていた。出題ミスだとかなんとか。その真偽はわからないのだけれど,この問題の最終段階で必要となる式を眺めると,ちょっと自分には解けなさそうだった。なさけない。以下の左辺から右辺を導くのだ。

n=22n2+3n2=12+2π17tan17 π2 

Mathematicaでは,238μsで正解が得られる。ChatGPT o3-mini-highでは,やたら推論時間がかかってしまい途中では誤りもみられる。便利なようだけれど使い方は要注意。 
Q(koshix):
次の級数を求めてください。 Σ_{n=2}^∞ 2/(n^2+3n-2)

A(ChatGPT o3-mini-high):
31秒かけて推論)
(導出過程省略)
【結論】
したがって,この級数の和は,
n=22n2+3n2=172[ψ(7+172)ψ(7172)] 
【補足】
・ここで用いたディガンマ関数ψ(x)は,ψ(x)=ddxlnΓ(x)と定義される特殊関数です。
・回答はこれ以上初等関数だけで簡単な形にまとめることは難しく,この形で示すのが一般的です。

このように、部分分数分解とディガンマ関数の性質を用いることで、与えられた級数を閉じた形で表すことができました。


Q(koshix):
ディガンマ関数を用いずに,高等学校数学の範囲に登場する関数で表現してください。

A(ChatGPT o3-mini-high):
117秒かけて推論)
(導出過程省略)
【まとめ・最終回答】
部分分数分解と(望遠的な)和の評価により、特殊関数を使わず初等関数だけで表すと,
n=22n2+3n2=117ln5+ 17517 

【補足】
・導出の途中で「拡張調和数」やディガンマ関数を用いる方法もありますが,最終結果は対数と平方根のみで表されています。
・(実際の解析では、各項の和を適切に並べ替え・打ち消すことでこの形が得られることが確認できます。)

以上が、特殊関数を用いず高等学校数学レベルの初等関数のみで表現した解答です。


Q(koshix):
その結果は間違ってますね。Tan が出てくるはずですが。

A(ChatGPT o3-mini-high):
74秒かけて推論)
(導出過程省略)
【最終回答】
n=22n2+3n2=2π17tanπ 172+12 
(解説省略)

2025年1月22日水曜日

立体と内接球(3)

立体と内接球(2)からの続き

さきほどから,底面を構成する正n角形の一辺の長さをaとして議論を進めてきた。これだとnを無限大にしたときに a を無限小にする必要があって円錐への極限をとる話が面倒になる。正三角錐や正四角錐の場合から話を繋げたのでこんなことになってしまった。

そこで,正n角形の中心Hからその1つの頂点までの距離をaとする。正n角錐の頂点Gから底面の頂点までの距離をbとする。Hから正n角形の一辺を見込む角度は2πnであり,Hから辺までの距離はcos(π/n),一辺の長さの半分がsin(π/n)となる。また正n角錐の高さGHは b2a2である。

正n角錐の内接球の半径をrとすると,前回のように三角形GOKにおけるピタゴラスの定理がrを決める条件式を与える。

{b2a2sin2(π/n)acos(π/n)}2+r2={b2a2r}2
これを解くと,
r(b)=acos(π/n){b2a2sin2(π)/nacos(π/n)}b2a2
前回のように,球の体積の多角錐の体積に対する比率を最大化するbを求めると,
ddb{r(b)3/b2a2}=0
を解いて,
b=a5+4cos(2π/n)
となる。
nが無限大の極限の正円錐の場合は,b=3aとなり,$r=\dfrac{a}{\sqrt{2}}になる。


図:半径aの円に内接する斜辺bの正n角錐と内接球


2025年1月21日火曜日

立体と内接球(2)

立体と内接球(1)からの続き

具体例として,辺の長さが a の正 n 角形を底面とし,頂点から底面への辺の長さが b である正 n 角錐に内接する半径 r の球の問題を考えてみた。共に正 n 角錐の高さはb2(a2sin(π/n))2となる。図ではN=3の奇数角形とN=4の偶数角形の例で示している。



図:正n角錐と内接する球の側面図と平面図

上図から明らかなように,△DOF あるいは △GOKにおけるピタゴラスの定理から,nが偶数でも奇数でも共通の r に対する条件式が得られる。
すなわち,
{b2a2/4a2tan(π/n)}2+r2={b2a2/4sin2(π/n)r}2
これから,
r(b)=a/(2tan(π/n))b2a2/4a2/(4tan2(π/n))b2a2/(4sin2π/n)
さらに,球の体積の多角錐の体積に対する比率を最大化するbを求めると,
ddb{r(b)3/b2a24sin2(π/n)}=0
を解いて,
b=a2sin(π/n)5+4cos(2π/n)
となる。
そこで,n=3,4,6に対して,b=a,52a,7ar=124a,18a,38a が得られる。

2025年1月20日月曜日

立体と内接球(1)

真鍋さんのブログでは,算額にある幾何学の問題がよくとりあげられる。おもしろそうだけれど,面倒な計算が必要なので(最近のものはChatGPTによる数値計算にまで至っている)ちら見しただけで通り過ぎることが多い。高校の恩師の話(愛媛の算額)はおもしろかった。

ところで,三角錐に内接する球におけるある式が目についた。V=13rS だ。しかも,これは角柱,円柱,角錐でも成立するとある。えー,そんな式習ってないけど。と思ったが,おちつていよく考えてみるとなるほど案件だった。

N個の多角形で囲まれる一般の凸N多面体Pの内部に一点Oを取る。凸N多面体Pは,その内部の点Oと凸N多面体の表面を構成する隣接各点pkを結んでできる三角錐τiに,重ならないようにして分割できる(分割方法は一意的ではない)。

さらに凸N多面体の表面を構成する各面sk(面積はSkとする)に寄与する三角錐τiを集めた一つの多角錐をtkとし,その体積をVkとする。またO点から,凸N多面体の各面skへの距離(面に下ろした垂線の長さ)をHkとする。

N多面体Pの体積をV,表面積をSとすると,V=Nk=1Vk,S=Nk=1Sk である。一方,Vk=13HkSk である。もしHkがすべて等しい値rであれば,凸N多面体Pの全ての面と内接する球が存在し,その半径がrになったものだと理解できる。このとき,V=13rSとなる。

この特別な場合が角柱であり,角柱の一底面を一点に縮めてその点と中心点の関係を外せば角錐になる。また,正多角形を底面として側面をすべて合同な長方形や二等辺三角形にした角柱や角錐の側面を無限に小さく刻めば円柱や円錐になる。

図:真鍋さん(MIPO)の伊佐爾波神社算額No.6から引用


2024年11月22日金曜日

置換可能素数

レピュニットからの続き

プログラミングの例題として次のようなことを考えた。「ある素数があって,その各桁を入れ換えてできる全ての数が素数になるものを考える。その最大の素数はどんなものだろうか。」

で,実際に自分でプログラムを書くかというと,それは面倒なので,いつものようにAIに頼ることにする。軟弱だ。脳細胞のフレイルだ。OpenAI o1とかPerlexity Proに頼ってみたが,正しい答えがでない。PythonをJuliaに書き換えても,さらにドツボにはまるだけ。

一度リセットしてから,再度挑戦した。

Q(koshix):
n桁の素数が与えられたとき,その各桁の数字を入れ替えてできるすべての数が再び素数になるようなもので,できるだけ大きな数を探したい。桁数nを与えたときに,この条件を満たす最大の数を求めるプログラムを作成してください。

A(Perplexity Pro):
この問題を解決するために、以下のようなプログラムを作成しました。このプログラムは、与えられた桁数nに対して、条件を満たす最大の素数を見つけます。

import itertools
from sympy import isprime

def find_large_permutational_prime(n):
    lower_bound = 10**(n-1)
    upper_bound = 10**n
    primes = [p for p in range(lower_bound, upper_bound) if isprime(p)]
    largest_permutational_prime = -1
    for prime in primes:
        permutations = set(int(''.join(p)) for p in itertools.permutations(str(prime)))
        if all(isprime(p) for p in permutations):
            largest_permutational_prime = max(largest_permutational_prime, prime)
    return largest_permutational_prime

そして,ChatGPT-4oでJuliaに変換したものが次の通りである。
using Primes
using Combinatorics

function find_large_permutational_prime(n)
    lower_bound = 10^(n - 1)
    upper_bound = 10^n - 1
    largest_permutational_prime = -1
    
    for prime in primes(lower_bound, upper_bound)
        perms = Set(parse(Int, join(p)) for p in Combinatorics.permutations(string(prime)))
        if all(isprime(p) for p in perms)
            largest_permutational_prime = max(largest_permutational_prime, prime)
        end
    end
    
    return largest_permutational_prime
end
これを実行すると,n=3で991が得られる。n=4,5,6では結果なしということになった。これから,nが4以上では条件を満たす素数が存在しないと証明できないかと考えたけれど,そんな簡単な話ではなかった。もちろん,現在の生成AIでは証明できない。

調べてみるとこのような素数は,置換可能素数として既によく知られているものだった。911の上にある素数はレピュニット素数だった。これは無限個あると推定されているがまだよくわかっていないのだ。もちろん,3,7,9 の1種類だけが並んだ数は素数にはならない。

2024年11月18日月曜日

ピタゴラスの定理(2)

ピタゴラスの定理(1)からの続き

新しいピタゴラスの定理を発見した女子高校生チームが,新論文を出していた。さらに5つの新しい証明方法を見つけたというものだ。さっそく確認してみる。


図:ピタゴラスの定理の証明


図の3つの三角形に正弦定理(この名前がすでに思い出せない)を当てはめると次の六つの関係式が得られる。
ABC:asinα=bsinβ=csinπ/2
ADC:a+dsin2α=bsin(βα)=xsinπ/2
ADB:dsinα=csin(βα)=xsinβ
xの項は不要だとすれば四式が残る。これから,α, β, d を消去すると  a, b, c の関係式が得られる。すなわち,(a+d)sin(βα)=bsin2α,dsin(βα)=csinα から d を消去して,sinα=ac, sinβ=bc, cosα=bc, cosβ=ac を代入する。
ab2a2c2+cac=b2abc2 となり,a2+b2=c2 が導かれる。

2024年11月5日火曜日

リュカ数列

フィボナッチ数列と1/89からの続き

ときどきネット上のフリーの教科書で掘り出し物があって楽しい。昨日散歩していた犬棒は,Sheldon Axler の Linear Algebra Done Right という線形代数のpdf教科書に当たった。Springerからも紙版が出版されている。その pdf ファイルの,クリエイティブコモンズ  表示-非営利 4.0 国際ライセンスのトップページには,次の式がでかでかと護符のように貼り付けられていた。
Fn=15{(1+52)n(152)n}

この式がフィボナッチ数列を表しているというのを知ったのは,ずいぶん遅くて大学4年生のころだ。自宅で塾を開いて,中学生や高校生に数学を教えていたきのこと。大学進学のためのマイナーで難しそうな問題集を解かせていた北野高校の生徒が,フィボナッチ数列の問題を上記の式を使って一発で解いてきた。田舎の高校生時代に,近所に住んでいた数学乙の西野先生にしこまれた数列の漸化式の標準解法しか知らなかった物理学科の学生は見たこともない式にどぎまぎしてしまったのだった。確かに答えはあっていた。

その思い出の式を眺めていたら,5の中を変えたらどうなるのかが初めて気になってきた。早速試してみよう。ということで,Mathematicaで答えを当たってみると,ルートの中身が4の倍数+1の場合に整数の数列が得られることがわかった。

そこで,軟弱なGさんは,久々にOpenAI o1-previewを取り出してその理由を聞いてみた。
Q(koshix):
数列 a_n = f[n_, m_] :=  1/Sqrt[m] (((1 + Sqrt[m])/2)^n - ((1 - Sqrt[m])/2)^n) // Expand がすべて整数の項からなる数列になるのは,n がどのような値をとる場合かを説明してください。

A(o1-preview):
(日本語による不十分で誤った説明→略)
Answer: Because all terms a_n  are integers if and only if n is the square of an odd integer—that is, when m =k^2 with odd k.

Q(koshix):
あなたのおっしゃる条件からはずれる場合,例えばn=5を確かめてみてください。この場合も全て整数の項からなる数列になりますよね。

A(o1-preview):
(日本語によるやや不十分でも正しい結果→略)
Answer: Because all terms a_n are integers if and only if n leaves a remainder of 1 when divided by 4 —that is, when m≡1 mod 4.

すっきりしないので,しぶしぶ人間の脳で考えることにしてみた。
αm=1+m2, βm=1m2と置いて,F(m)n=1m(αmnβmn)である。
そこで,F(m)0=0,F(m)1=1m(αmβm)=1
さて,αmnβmn=(αm+βm)(αmn1βmn1)αmβm(αmn2βmn2) 
いいかえれば,F(m)n=F(m)n11m4F(m)n2
したがって,m=4k+1であれば,F(m)n=F(m)n1+kF(m)n2が成り立つので,初期値からすべてのF(m)nは整数となる。

これはどうやら,リュカ数列という,整係数の2次方程式の2つの解から定義される漸化式による二階線形回帰数列の一種だということだ。フィボナッチ数リュカ数ペル数フェルマー数メルセンヌ数など数論に現れる重要な数列がこれに属するとWikipediaには書いてあった。

2024年9月21日土曜日

OpenAI o1(3)

OpenAI o1(2)からの続き

前回の真鍋さんのMIPOの次の問題にチャレンジしたところ,OpenAI o1から正解は出てこなかった。とりあえず,自力で考えてみようとしたら,なかなか頭が働かない。次のような整数問題だ。
Q(koshix):
最大公約数が1である正の整数の組(a1,a2,a3,a4,a5,a6)であって, k1=a1/a2, k2=2*a2/a3, k3=3*a3/a4, k4=4*a4/a5, k5=5*a5/a6, k6=6*a6/a1 として,(k1, k2, k3, k4, k5, k6) がすべて 整数であるようなものはいくつあるか。
答えは6と出たが,正解は,15876 (=126^2) なのだった。実は,自分もAIと同じ間違いをしていて,すべてのa_i の組が互いに素であると思い込んでいた。そうではなくて,(a1, a2, a3, a4, a5, a6)の6つの数の最大公約数が1という条件なのだ。

つまり,k1*k2*k3*k4*k5*k6=6!=720を6つの正の整数(k1,k2,k3,k4,k5,k6)の積に分解する場合の数を求めればよい。つまり,720を素因数分解した 2^4*3^2*5 の各指数のべきを6つの箱に分配する場合の数(重複組み合わせ)の積になり,6H4*6H2*6H1=126*21*6=15876 である。

計算方法はわかったが,これが正しいためには,(a1,a2,a3,a4,a5,a6)と(k1,k2,k3,k4,k5,k6)が一対一対応する必要がある。その証明を OpenAI o1にきいて見よう。

Q(koshix):
a_i (i=1 ... n) が正の整数であり,(a_1, a_2 ..., a_n) の組の最大公約数は1であるとする。
a_1/a_2=k_1, 2*a_2/a_3=k_2, 3*a_3/a_4=k_3, ... (n-1)*a_{n-1}/a_n=k_{n-1}, n*a_n/a_1 = k_n 
において,(k_1, k_2, ... k_n) は整数となって,k_1*k_2*k_3*...*k_{n-1}*k_n = n! が成り立つ。
このとき,一つの(k_1, k_2, ... k_n) に対して必ず一つの(a_1, a_2 ..., a_n) が対応することを証明してください。

A(OpenAI o1)
証明:
まず、与えられた条件から aiki を用いて表現します。

ステップ1:aikia1 で表す
最初の方程式から始めます。
1. a1a2=k1  ⇒  a1=k1a2
2. 2a2a3=k2  ⇒  a3=2a2k2
3. 3a3a4=k3  ⇒  a4=3a3k3
   ⋮
このパターンを一般化すると、
ai=(i1)!a1i1j=1kj
となります。

ステップ2:最後の方程式を利用して kn を表す
最後の方程式は
nana1=kn
これに an の表現を代入すると、
n(n1)!a1n1j=1kja1=knn!n1j=1kj=kn
したがって、k1k2kn=n! が成り立ちます。

ステップ3ai の一意性の証明
aia1ki で表すことができましたが、ai が整数であるためには、a1 が適切な値である必要があります。具体的には、すべての ai が整数となる最小の a1 を見つけます。
ai に対して、分母となる i1j=1kj(i1)! が存在します。すべての ai が整数となるためには、a1 がこれらの分母の最小公倍数(LCM)の倍数である必要があります。
すなわち、
a1=lcm(1,k1,k1k22,k1k2k36,,k1k2kn1(n1)!)
この a1 を用いると、すべての ai は一意に定まります。

ステップ4:最大公約数が1であることの確認
もし他に ai という解があると仮定すると、比 aiai はすべて等しくなります。しかし、gcd(a1,a2,,an)=1 であるため、この比は1でなければなりません。したがって、ai=ai となり、一意性が証明されます。

結論
以上より、与えられた (k1,k2,,kn) に対して、一意な (a1,a2,,an) が存在することが証明されました。よって、一つの (k1,k2,...,kn) に対して必ず一つの (a1,a2,...,an) が対応します。
なるほど,素晴らしい。ちょっと気になったのは,分母であるi1j=1kj(i1)! が必ず整数なのかどうかである。具体的に試して見ると,必ずしも整数にならない場合がある。そんなときは,分母を形成する有理数の分子だけに着目して最小公倍数を考えれば良い。分母の有理数の分母は元の数の分子に回るだけだからである。そんなわけで,多少詰めが甘いような気がするけれど,ここまで推論できれば大したものである。


2024年9月13日金曜日

OpenAI o1(1)

GPT-4oからの続き

今年の5月にOpenAIがGTP-4oをリリースした。試してみるとなかなか良かったので,早速ChatGPT を再サブスクリプションしてから4ヶ月が経過した。ところが,この業界は流れが速いので,いつの間にかChatGPT-4oは取り残されつつあった。Claude 3.5 Sonnet がいいとか,Gemini 1.5 Proも使えるようになったとか,Perplexity やGenspark が最高だ!とか,他にも NapkinAI やらGammasやら話題が目白押し。ChatGPT一強から,これらの組み合わせによる群雄割拠の世界になってきた。

GPT-4oはわりと大きなファイルを読み込め,イメージも生成できるので,まだ,若干のアドバンテージはあったのだけれど,ネット上ではそろそろ解約するかという話題が湧き出して液状化現象を呈していた。さあ,そこに登場したのが,OpenAI o1 だ。OpenAIからのリリース文をGeminiに要約させると次のようなものだった。
OpenAIは、複雑な問題を解く能力に特化した新しいAIモデルシリーズ「OpenAI o1-preview」を発表しました。 このモデルは、問題解決に時間をかけ、より深く思考することで、従来のモデルよりも複雑なタスクをこなせるようになっています。特に、科学、コーディング、数学といった分野で高い能力を発揮し、国際数学オリンピックの予選問題を83%の正解率で解くなど、驚異的な成果を上げています。

o1-previewは、人間のように思考する過程を模倣するように訓練されており、様々な戦略を試したり、自身の誤りを認識したりすることができます。 ただし、現時点ではChatGPTのような一般的な機能は備わっていません。

安全性についても、OpenAIは新たな対策を講じています。 例えば、ユーザーが安全な範囲を超えた質問をしても、o1-previewがそれに従わないようにする仕組みが強化されています。また、外部の研究機関と協力し、モデルの安全性評価を行っています。

OpenAIは、o1-previewが科学やエンジニアリング分野における複雑な問題解決に貢献すると期待しています。 例えば、医療研究者が遺伝子データを解析したり、物理学者が複雑な方程式を解いたりする際に、このモデルが役立つ可能性があります。
o1-previwと簡易版でより高速な o1-mini が有料ユーザ向けに公開されていたので,すぐに使うことができた。ただし,o1-previewは 30回/週,o1-miniは 50回/週の上限が定められていた。o1は必ずしもChatGPT-4o の延長線上に位置するわけではないようだ。これらの試みがどこかで次のプレAGIモデルに統合されるのかもしれない。


早速試してみるべく,OpenAIにあった見本をそのまま実行してみた。問題は次の通りである。
B を表面積が 54,体積が 23 の直方体の集合とします。
r を、集合 B の各直方体を内包できる最小の球の半径とします。
r2 の値は、互いに素な正の整数 pq を用いて pq と表すことができます。p+q を求めなさい。
推論プロセスが順次進行し,思考時間TT=105秒で正しい答えがでてきた。うーん,どうやら自分よりは賢そうである。ちょっと太刀打ちできないかもしれない。ただ,OpenAIのプレスリリースについて要約を求めると次のような答えであり,ChatGPT-4oほど融通がきかなかった。
申し訳ありませんが、2023年10月までの知識では指定されたURLや「OpenAI O1プレビュー」に関する情報を持っておりません。しかし、OpenAIのサービスや製品についてご質問があれば、できる限りお手伝いいたします。

真鍋さんのMIPOのページで,朝日新聞の数学体験教室の問題を解いていたので,こちらを与えてみることにする。
Q(koshix): a<b<c をみたす正の整数の組(a,b,c)であって, a^2-2005a > b^2-2005b > c^2-2005c が成り立つものはいくつあるか。

A(OpenAI o1 TT=24秒): 問題を解くために,a > b > c,a^2−2005a < b^2−2005b < c^2−2005c を満たす正の整数の組 (a,b,c) を求めます。 
 まず,関数 f(x)=x2−2005x を考えます。この関数の挙動を理解することが重要です。極値を求めるために,導関数を計算してゼロと等しくします: f'(x)=2x−2005=0⟹x=1002.5 
これは,f(x) が x≤1002.5 のとき減少し,x≥1002.5 のとき増加することを意味します。 
したがって: 
整数 x≤1002 の範囲では,f(x) は減少関数です。 
整数 x≥1003 の範囲では,f(x) は増加関数です。
 a > b > c であり, f(a) < f(b) < f(c) を満たすためには,a,b,c ≥ 1002 でなければなりません。これは, f(x) がこの範囲で減少するためです。
もし a,b,c ≤ 1003 であれば,f(x) は増加するので、不等式 f(a) < f(b) < f(c) は成立しません。
したがって、求める組の数は,1から1002までの整数から異なる3つの整数を選ぶ組み合わせの数になります。これは組み合わせの公式で計算できます: 
 組の数=1002_C_3=1002×1001×1000 / 3×2×1 これを計算すると:
答え:167,167,000 
 この計算は正しいです。
おしい。 ほとんど正しいのだけれど,c' = 2005-c の点も条件を満たすので,この答えの2倍が正解となっている。それでも,ここまでの推論ができるのはすごいわ。どうやら,推論時間に関するスケーリングの発見がキモらしいので,これからますます,GPUパワーが必要になるのか・・・


2024年9月12日木曜日

対数正規分布

世帯の金融資産分布は,対数正規分布を考えるのが妥当だと Geminiがいった。Perplexityによれば 零端があるので,パレート分布がいいのかもしれない。

ここでは,対数正規分布を仮定して日本の世帯の金融資産保有額に関するパラメタを探してみる。金融資産の値を変数 xとして,世帯数の確率密度分布を f1[x, μ, σ] ,累積確率密度分布をg1[x, μ, σ] とする。これにともない,金融資産×世帯数の確率密度分布を f2[x, μ, σ] ,累積確率密度分布をg2[x, μ, σ,λ] とする。積分定数の不定性があることからパラメタλを追加した。Mathematicaのコードは次のようになる。
In[1]:= f1[x_, μ_, σ_] := (E^(-((μ - Log[x])^2/(2 σ^2))) Sqrt[2/π])/(2 x σ)
Integrate[f1[x, μ, σ], x]

Out[1]= 1/2 Erf[(-μ + Log[x])/(Sqrt[2] σ)]

In[2]:= 
p1 = {{0.3, 0.778}, {0.5, 0.912}, {1.0, 0.972}, {5.0, 0.998}};
q1 = ListPlot[p1, PlotStyle -> {Red, PointSize[Small]}, 
   AxesLabel -> {"x", "y"}, PlotRange -> {0, 1.2}];

In[3]:= 
g1[x_, μ_, σ_] := 1/2*Erf[(-μ + Log[x])/(Sqrt[2] σ)] + 0.5
nlm = NonlinearModelFit[p1, g1[x, μ, σ], {μ, σ}, x];
nlm["BestFitParameters"]

Out[3]= {μ -> -1.92447, σ -> 0.933737}

In[4]:= Show[q1, 
 Plot[g1[x, -1.92447, 0.933737], {x, 0, 5}, PlotRange -> {0, 1}]]


In[5]:= f2[x_, μ_, σ_] := x*f1[x, μ, σ]
Integrate[f2[x, μ, σ], x]

Out[5]= -(1/2) E^(μ + σ^2/2)
  Erf[(μ + σ^2 - Log[x])/(Sqrt[2] σ)]

In[6]:= 
p2 = {{0.02, 0.01}, {0.3, 0.125}, {0.5, 0.187}, {1.0, 0.234},
 {5.0, 0.282}, {20.0, 0.302}};
q2 = ListPlot[p2, PlotStyle -> {Red, PointSize[Small]}, 
   AxesLabel -> {"x", "y"}, PlotRange -> {-0.1, 0.35}];

In[7]:= g2[x_, μ_, σ_, λ_] := -(1/2) E^(μ + σ^2/2) 
Erf[(μ + σ^2 - Log[x])/(    Sqrt[2] σ)] + λ

nlm = NonlinearModelFit[p2, g2[x, μ, σ, λ], {μ, σ, λ}, x];
nlm["BestFitParameters"]

Out[7]= {μ -> -1.72573, σ -> 0.914071, λ -> 0.154702}

In[8]:= Show[q2, 
 Plot[g2[x, -1.72573, 0.914071, 0.154702], {x, 0, 20}, 
 PlotRange -> {0, 0.35}]]

非線形モデルフィットするためのデータは,野村総研の「日本の富裕層は149万世帯、その純金融資産総額は364兆円と推計」というレポートを用いた。前段と後段のパラメタは本来同じでなければならないが,そこまで含めた解析はできていない。対数正規分布だと両方に整合的な結果は得られないかもしれないがよくわからない。




(付)上記の図から得られた分布データ
金融資産 世帯数 世帯割合 資産額 資産割合
1 0.0-0.3  4213.2  0.778   678  0.415
2 0.3-0.5  726.3  0.134   332  0.203
3 0.5-1.0  325.4  0.060  258  0.158
4 1.0-5.0  139.5  0.026  259  0.159
5 5.0→  9    0.002  105  0.064
   5413.4  1.000  1632  1.000

このデータから得られる金融資産の世帯平均値は3010万円であるが,先ほど仮定した分布における最頻値は590万円。 生命保険文化センターの最近のデータとは少しズレがあるかもしれない。


2024年8月22日木曜日

複式簿記

複式簿記を勉強しようかなと思っていたら,それは群論で理解できるとの託宣が空から降ってきた。そういうのが好きだ。

早速,調べてみた。ところで,生成AIに尋ねることを「調べる」といって良いのだろうか。
Q(koshix):
複式簿記が代数学の群であるとはどういう意味ですか。その場合,群をなしている集合は何の集合であり,定義されている演算はどのようなものですか。また,単位元と逆元はどうなりますか。 
A(ChatGPT-4o):
複式簿記が代数学の群(Group)であるということは、複式簿記の操作や構造が群の公理を満たしているということです。群の基本的な定義に基づいて、複式簿記を群として解釈する際のポイントを説明します。

群の定義
群とは、集合 G とその上の二項演算 ∗ に対して、以下の4つの公理を満たす代数構造のことです。
1.結合律(Associativity):任意の a,b,cGについて,(ab)c=a(bc) が成立する。
2.単位元(Identity element): G の中に単位元 e が存在して、任意のaGについて,ea=ae=a が成立する。
3.逆元(Inverse element):任意の aGについて,ab=ba=eを満たす元 bG が存在する(b=a1)。
4.閉性(Closure):任意の a,bGについて,abG である。

複式簿記における群の解釈
1.集合  G
・複式簿記では、資産、負債、収益、費用、純資産といった「勘定科目」の集合が存在します。この勘定科目が群を構成する集合 G に相当します。
2.演算  
・演算としては「仕訳」が相当します。仕訳とは、ある勘定科目から他の勘定科目への「移動」を意味します。したがって、群の演算 は「ある仕訳と別の仕訳を組み合わせて新しい仕訳を作る操作」と解釈できます。
3.単位元  e
・単位元は群の要素と何らかの操作を行ってもその要素を変化させない要素です。複式簿記の文脈では「無操作」、すなわち資産や負債に何も影響を与えない操作が単位元に相当します。これは「仕訳を行わない」という状態を表します。
4.逆元  a1
・逆元は、仕訳による操作を元に戻す操作に相当します。例えば、「ある勘定科目に借方として100円を記入する」という仕訳の逆元は「同じ勘定科目に貸方として100円を記入する」仕訳です。これによって、仕訳の効果が打ち消され、元の状態に戻ることになります。

群の公理の適用
1.結合律:仕訳は連続して適用されても、その順序が変わっても同じ結果を得られるため、結合律が成り立ちます。
2.単位元の存在:「無操作」の仕訳は、どの仕訳とも組み合わせても仕訳内容を変えないため、単位元が存在します。
3.逆元の存在:各仕訳に対して、その効果を打ち消す逆の仕訳が存在するため、逆元が存在します。
4.閉性:すべての仕訳は、勘定科目の集合内での操作であるため、仕訳を適用した結果もまた勘定科目の集合内に留まります。

結論
複式簿記を群と見なす場合、勘定科目の集合が群をなす集合に対応し、仕訳の操作が群の演算に相当します。単位元は「無操作」、逆元は「仕訳の逆操作」として解釈できます。この解釈によって、複式簿記の構造が代数学の群の性質を持つことが理解できます。

2024年8月6日火曜日

26

26=Σn=1n32n という式が急に現われてちょっとビックリした。自分で考える力が衰えている老人はさっそくPerplexity PROに聞いてみる。
Q(koshix):
Mathematicaで f[k_]:=Sum[n^k/2^n, {n, 1, Infinity}]  と定義したとき f[k]の一般式を与えてください。 
 A(Perplexity PRO): 
Mathematicaで定義された関数  f[k]:=Sum[n^k/2^n, {n, 1, Infinity}] の一般式は以下のように与えられます:f(k)=Li_−k (1/2)。ここで、Li_−k (1/2) はポリログ関数(polylogarithm function)を表しています。この結果は、無限級数  ∑_{n=1}^∞ n^3/2^n の閉形式解を示しています。ポリログ関数は、このような形の無限級数を表現するのに適した特殊関数です。ポリログ関数 Li_−k (1/2)は一般に次のように定義されます: Li_s (z)=∑_{n=1}^∞ n^s/z^n この場合、s=−k および z=1/2 となっています。この一般式は、任意の実数 k に対して成り立ちます。特定の k の値に対しては、より簡単な形に簡略化できる場合もありますが、一般的にはこのポリログ関数の形で表現されます。この結果は、複雑な無限級数を単一の特殊関数で表現できることを示しており、数学的に非常に興味深い結果です。

正しいのだけれど,単に名前がついただけなので理解が深まらない。ChatGPT-4oに別の聞き方をしてみよう。
Q(koshix):
高校数学までの知識で Σn=1,∞ n^3/2^n の値を導出する方法を教えてください

A(ChatGPT-4o):
(もろもろ略)

Q(koshix):
いい線いっているようなのですが,ちょっと違うのではないですか。

A(ChatGPT-4o):
(もろもろ略)

Q(koshix):
惜しいですね,もう一息ではないでしょうか。

A(ChatGPT-4o):
(もろもろ略)
しかし、ここでの正確な計算をすると、最終的には 14 ではなく、 n=1n32n の値は正しくは 26 です。

導出過程の考え方は正しかったのだけれど,肝腎の代数計算が間違っている。何度かやり直してもうまく計算できず,最終的には,答えだけ無理矢理あわせてきた。夏休みの宿題に四苦八苦しているスーちゃん状態である。

ChatGPT-4oに提案された方法は,|x|<1として,Σn=1xn=11xという恒等式から出発し,この両辺を何度か微分して変形した式に x=12を代入するというものだ。

一回微分して両辺にxをかけると,Σn=1nxn=x(1x)2
この手続きをもう一度繰り返すと,Σn=1n2xn=x(1+x)(1x)3
さらにこれをもう一度繰り返すと,Σn=1n3xn=x(1+4x+x2)(1x)4
これに,x=12を代入すると,Σn=1n32n=26





2024年4月27日土曜日

清少納言の知恵の板

一辺の長さが4,面積が16の正方形Sを考える。次に,直角を挟む2辺の長さが√2の直角二等辺三角形Tを考えると,その面積は1であるから,先の正方形Sの面積の16分の1に相当する。

この直角二等辺三角形Tを単位として,1枚から4枚組み合わせた図形(直角二等辺三角形,正方形,平行四辺形,等脚台形,直角台形など)の集合Rを考える。もとの正方形SをRの集合から重複を含めて選んだ図形7片に分割する。

面積だけでその分割パターンを考えると,(3-3-2-2-2-2-2),(4-2-2-2-2-2-2),(4-3-2-2-2-2-1),(3-3-3-3-2-1-1),(4-3-3-2-2-1-1),(4-4-2-2-2-1-1),(4-3-3-3-1-1-1),(4-4-3-2-1-1-1),(4-4-4-1-1-1-1)の9パターンになる。

このうちの(4-3-2-2-2-2-1)が清少納言の知恵の板という名前で知られる江戸時代に考案されたパズルであり。(4-4-2-2-2-1-1)がタングラム(七巧図)とよばれる,中国で同じころに考えられて19世紀に欧米に伝わって普及したシルエットパズルだ。これらの起源や関係などははっきりしていない。

図:清少納言の知恵の板(上)とタングラム(下)

[1]江戸のパズルに挑戦

2024年4月18日木曜日

オイラーのφ関数

MIPOの算数・数学コラムで,2024年阪大理系前期数学の問題が取り上げられていた。鈴木貫太郎のYouTubeで大学入試問題をながめていたので,甘く見ていたら,かなり難しくてちょっと手が出なかった。面白そうな整数論の問題は,オイラーのφ関数がストレートに取り上げられていた。以下ではすべて自然数 N = {1,2,...∞}の範囲に限定して考えることにする。


n∈Nに対して,集合A(n)={1,2,…n}を考える。このとき,φ(n)は,この集合A(n)におけるnと互いに素な数の個数を与える。さあ,ここからが苦難の道の始まりだ。最近はアルジャーノンの下り坂を急降下中なので,言葉の定義にいちいち引っかかってころぶのである。

約数:自然数 n を自然数m (≦ n)で割ったときの余りが0であれば,mはnの約数である。
 例:2は6の約数,1はnの約数,nはnの約数
互いに素:2つの自然数 m,n の共通の約数が1だけのとき,mとnは互いに素である。
 例:2と3は互いに素である,nと1は互いに素である,nとnは互いに素でない。

例:n=6のとき,A(6)={1,2,3,4,5,6}を考える。2の倍数の集合Pは{2,4,6}, 3の倍数の集合Qは{3,6}, 
6の倍数の集合はP∩Q={6}は,6と互いに素な数の集合はA-P∪Q={1,5}で, その要素数はφ(6)=2

オイラーのφ関数(トーシエント関数)φ(n)は,A(n)においてnと互いに素な数がなす部分集合B(n)の要素数を表す。A(n)-B(n) は nの約数の集合から{1}を除いた集合PQRである。

阪大の問題は,p,q,r が素数,a,b,c が自然数として n=p^a q^b r^cに対するφ(n)を求めるものである。とりあえず,A(n)における p,q,rの倍数の数をカウントすればよい。


図:φ(n) = n(B(n))=n(A(n)-PQR)   の図

n= p^a q^b r^c の場合,n= p^(a-1) q^(b-1) r^(c-1) p q r として,φ(n) = p^(a-1) q^(b-1) r^(c-1) φ(p q r )となる。また,φ(p q r) = (p-1)(q-1)(r-1) となるので,φ(n) =p^(a-1) q^(b-1) r^(c-1) (p-1)(q-1)(r-1) で与えられる。

2024年4月10日水曜日

鉄の星:テイン

早川書房世界SF全集の第4巻はガーンズバック/テインのラルフ124C41+/鉄の星だ。

ラルフ124C41+は小学校時代に友達に借りた学習雑誌の付録で読んだだけ。世界SF大会で毎年選ばれるヒューゴー賞は,1953年に創設された由緒正しいものだが,アメリカSF界の初期の功労者であり,ラルフ124C41+の著者ヒューゴー・ガーンズバック(1884-1967)にちなんで名付けられている。

問題はそちらではなく併録されている「テイン」の「鉄の星」のほうだ。そのころから今に至るまでテインが誰かもよくわからなかったし,鉄の星にもまったく興味がわかなかったので第4巻は買わずにいた。ところがです。この度調べてみると,鉄の星(Iron Star)の著者ジョン・テイン=John Taine は,数学者 Eric Temple Bell (1883-1960)のペンネームだった。


数学者のE. T. ベルの方はよく知っていた。ハヤカワ文庫の「数学を作った人々」の著者である。その3冊組は自分の本棚に並んでいる。E. T. ベルはジョン・テインのペンネームでいろいろとSFを書いているようだ。物理学者でいえば,フレッド・ホイルに少し似ている。

そのベルが数学者としてどんな仕事をしているのかというと,ベル数ベル多項式を考えた人だった。ベル数Bnとは異なったn個の対象を分割する方法の数である。異なったn個の対象をr個のグループに分割するのは第2種スターリング数nSrであり,その和がベル数になる。

n=5のベル数は,B5=52となるが,これは源氏香の数に等しい。源氏香という香道の遊び方は,本質的に異なった5種の香の分類の問題=ベル数5の問題だった。


図:五種の香をかぎ分ける源氏香の52パターン(Wikipediaから引用)

E. T. ベル=ジョン・テインのSFは,日本では前述の鉄の星を除いて出版されていない。カナダのGutenbergプロジェクトにはかろうじて,The Iron Star が公開されていた

2024年2月9日金曜日

直角

理科クラブと算数クラブからの続き

小学校4年の算数の時間のことだ。折り紙を2回折ると直角をつくることができるという話になった。そこで,先生がみんなに尋ねた。折り方によって直角はいくつくらい作ることができるでしょう。さっそく折り紙をもちながらクラスでわいわいと議論がはじまった。

クラスの中でもよくできて運動も得意で発言力のあった中田君が3000くらいかなあといった。それに賛同する子が多かった。選挙で自民党に票が集まるのと同じ原理だ。強いものが正義であり真理なのである。これに対して,転校生でちょっとみんなからはずれていた眼鏡の松村さんと自分が,それはおかしい,ほんの少しでも折り線をずらせば可能なので,無数にできるはずだと主張した。

教訓1:真理はかならずしも多数決では決まらない
教訓2:力(権威)が大衆の正義になることは多い

自分が苦手だった沢崎先生はどうやってその結果を集約したのだろうか。そのあたりははっきり覚えていない。


写真:おりがみで直角をつくる方法


2024年2月8日木曜日

理科クラブと算数クラブ

中国の小学生の数学からの続き

1964年,泉野小学校では,5年生になるとクラブ活動が始まった。モーターを使って自動車をつくる工作クラブもおもしろそうだったが,理科クラブのほうに入った。初回は担当の先生がこどもの名前を確認していくのだけれど,腰切と板書されて話がなかなか遠かった。上級生の活動発表では,水酸化ナトリウム水溶液で煮出した木の葉から葉脈標本を作るというのが印象的だった。

ともだちと数人のグループで何をテーマにしようかと相談した。その結果,ビーカーに入れた食塩水の濃度をかえたものをいくつか用意して,おたまじゃくしがどこまで大丈夫かを確かめようというとんでもない実験をすることになった。このあたり,先生の指導はほとんどいきとどいていない。結局食塩水の濃度計算だけ上達することになった。おたまじゃくしは結構の濃度まで耐えていたかもしれない。

さて,6年生になると学年のクラス数がこれまでの3組から4組に増えた。そこまで児童の数は増えていなかったはずなのだがどうしてだろう。5年2組の南毅先生(社会)から,6年4組の前多光子先生(理科)に担任は変わった。隣の6年3組には中薮先生(算数)が新しく着任した。どうやらかなり厳しく怖い先生だという噂がすぐに伝わってきた。

ある日,その中薮先生が新しく算数クラブを作ることになったというアナウンスがあった。思わずハイハイハイ,そのクラブに入りますと大きな声で訴えた。算数クラブには10人あまりのこどもたちが集まっただろうか。毎週一回のクラブの時間はとても刺激的で楽しかった。

ただ,覚えているのは,一筆書き三角数と四角数,図形の面積のパラドックスくらいだ。一筆書きでは,奇数点が0個か2個のときだけ可能だということを学んだ。三角数の規則性について説明があった後で,四角数はどうなるだろうかという設問に,わかったと思って挙手して答えたけれど,どうもうまくことばで説明することができなかった。中薮先生は,算数クラブではたいへんやさしく指導してくれた。


図:三角数と四角数(イミダスからの引用)

(注)大杉君は,中薮先生のクラスだったが,6年3組の算数の時間には,台形の対角線を結んでできた左右側の三角形の面積が等しいことを説明させるという授業が展開されていたことを教えてくれた。