不思議な掛算問題・考察(1)を紹介します。
考察(1)
相異なるm個の数字を用いて、k(1≦k≦[m/2])個の数字からなる数値とm-k個の数字からなる数値の積が、同じm個の数字で表されるものを求めよ。
●プログラム(MM121.bas)
' << MM121.bas >> ' Tiny Basic ' Dim A(9): ' A(J)=0は、左辺で数字Jが出現していないことを意味し、 ' A(J)=1は、左辺で数字Jが出現したことを意味する。 Dim B(9): ' 作業用配列。 ' ' 桁数Mについて調べる。 For M=2 To 5 ' Print: Print M;"個の数字" N0=10^(M-1) N1=10^M-1: ' M桁で最大値。 ' ' M桁の整数について解の探索。 COUNT=0: ' 解の個数。 For N=N0 To N1 ' 初期設定。 For J=0 To 9: A(J)=0: Next J ' S=N ' 変数Sの値を各桁に分解していく。数字に重複があればスキップ。 While S > 0 W=S Mod 10 If A(W) > 0 Then Goto *Lab A(W)=A(W)+1: S=Int(S/10) Wend ' ' 変数Nの値をタイプに分解する。 For K=1 To Int(M/2) T1=Int(N/10^K): T2=N Mod 10^K: For J=0 To 9: B(J)=A(J): Next J ' T=T1*T2 ' 変数Tの値を各桁に分解していく。 L=0 While T > 0 W=T Mod 10 If B(W) = 0 Then Exit Do B(W)=B(W)-1 T=Int(T/10) L=L+1 Wend ' ' 解の表示。 If L = M Then If T1 >= T2 Then COUNT=COUNT+1 Print Using"(####) ";COUNT; Print T1;"×";T2;"=";T1*T2 End If End If Next K *Lab Next N Next M End
実行結果