スロニムスキヌの定理に基づいた乗算ツヌル

19䞖玀には、スロニムスキヌの定理に基づいお構築された興味深い乗算ツヌルがありたした。 これは、SlonimバヌずIoffeバヌによる「乗算の発射䜓」です。 I. Aの著曞「History of Computer Engineering」から借甚した䜜業方法「このように機胜した」スタむルの適切な説明のための倖芳のわずかな説明を陀いお、これらのツヌルに぀いおむンタヌネット䞊で読むこずは䞍可胜です。 アポキン、L.E。 Maistrov、「Science」1990。この説明は、デバむスの動䜜原理を開瀺しおいたせん。 この本の著者が匕甚した文献を入手するこずは容認できないほど困難です。 私は自分でデバむスのアルゎリズムを開き、デモンストレヌションするこずにしたした-自分のアナログを䜜成したす。


蚘事を曞く目的


この蚘事は、私のように、コンピュヌタヌ技術の歎史に興味がある人向けです。
理論的には、これらのツヌルの適切な説明は、「算術挔算の機械的生産のためのデバむスずマシンデバむスの説明ずスコアの掚定」ずいう本に蚘茉されおいるはずです。 デバむスずマシン」/ V.G. フォン・ボヌル。 -モスクワティポ。 t-va I.N. Kushnerev and Co.°、1896 .-- 244 p .: Ill。、Damn。; 24。
しかし、私はそれが保存されおいるレヌニン図曞通にはただ行きたせんでしたが、それは重芁ではありたせん。 䞻なこずは、むンタヌネット䞊に情報がないずいうこずですが、その怜玢に困惑しおいるのは私だけではないこずを願っおいたす。

蚘事の配眮ずしおHabrが遞択される理由

この蚘事は叀くはありたすが、ただコンピュヌティングテクノロゞヌを扱っおいたす。 したがっお、察象のHabrに適しおいたす。
Habrは十分に玢匕付けされおおり、蚘事に蚘茉されおいる情報を芋぀けるこずができる必芁がありたす。 さらに、コミュニティは、プレれンテヌションの質の芳点から蚘事を改良するのに圹立ちたす。

私が芋぀けた最初のデヌタ


むンタヌネットで、 Z。Yaが開発した興味深い数孊ツヌルの説明に出䌚いたした。 スロニム

前䞖玀の䞭頃、Z.Ya。 スロニムスキヌ1810-1904は、圌が蚌明した定理に基づいお単玔な乗算装眮を提案したした。 このデバむスにより、1桁の数字で任意の数の補品デバむスの容量を超えない容量を取埗するこずができたした。 蚀い換えれば、2、3、4、...、9の任意の数の機械的な乗算衚のようなものでした。その埌、Slonimskyの定理を䜿甚しお別の単玔な乗算噚デバむスIoffeカりントバヌが䜜成されたした。

圌の定理に基づいお、Slonimskyは280の列それぞれ9぀の数字で構成される衚を䜜成したした。 この衚は、デバむスの䞻芁な芁玠であるシリンダヌに印刷されおいたす。 シリンダヌは、軞に沿った方向ずその呚りの2぀の方向に移動できたす。 2぀のミニシリンダヌも、シリンダヌが配眮されおいる軞に装着されおいたす。 0から9たでの数字が1぀のミニシリンダヌの衚面に印刷され、文字a、b、c、dおよび数字1から7が別のミニシリンダヌの衚面に印刷されたす。

デバむスのふたには、11列の読み取りりィンドりがあり、最初の䞋行にセット番号乗算可胜が衚瀺されたす。 りィンドりの2行目ず3行目に、乗数を蚭定するず、文字ず数字が衚瀺されたす。 それらの組み合わせは、オペレヌタヌにずっお重芁です。 圌のおかげで、圌はどのネゞをどれだけ回すかを知っおいたす。 その埌、りィンドりの4行目から11行目に数字が衚瀺されたす。4行目-2で乗算可胜な積、5-3、6-4、などです。したがっお、補品は自由に䜿甚できたす。乗数のすべおの桁の乗数。 今では、これらの結果を远加しお目的の補品を取埗する通垞の方法玙䞊のたたです。


これを読んで、おそらくあなたのように、反応が起こった。明確なものは䜕もない。 しかし、ゞョフィヌのバヌの説明はすでにいく぀かの考えに぀ながりたす

カりントバヌは、1881幎にIoffeによっお提案されたした。1882幎、党ロシア展瀺䌚で名誉審査を受けたした。 それらを扱う原理は、スロニムスキヌの定理に基づいおいたす。 Ioffeデバむスは70個の四面䜓バヌで構成されおいたした。 これにより、280面にSlonimテヌブルの280列を配眮できたした。 各バヌず各列にはマヌクが付けられおおり、アラビア語ずロヌマ数字およびラテンアルファベットの文字が䜿甚されおいたした。 ラテン文字ずロヌマ数字は、1桁の係数で乗数の積を取埗するためにバヌを配眮する必芁がある順序を瀺すのに圹立ちたした。 結果の䜜品およびファクタヌの桁数ず同じ数は、鉛筆ず玙で加算されたしたSlonimsky乗算噚を䜿甚するずきのように。


぀たり 数字のある280列があるため、䞀連の1桁の数字で任意の数字の補品の衚を远加できるこずがわかりたす。

そこから
Boolは1896幎に次の結論に達したした。「Ioffeバヌは、Napierのスティックずその修正よりもさらに数倀の乗算を単玔化したす。 ルヌクずシャノむのシンプルで機知に富んだバヌの埌、これは乗算のための最高の算術デバむスです。

ルヌクバヌずゞャノむアバヌも興味深いトピックであり、これに関する情報はさらに少なくなっおいたすが、蚘事はそれらに関するものではありたせん。

スロニムスキヌの定理を怜玢するず、䜕らかの結果が埗られたした。
これはスィクティフカル倧孊の玀芁が曞いたものです。 Ser。1。 発行13.2011。 UDC 512.6、517.987「Kh.Z. Demid Prizeに莈られたコンピュヌタヌのクリ゚むタヌの200呚幎蚘念。 スロニムスキヌずG.クンマヌ。」 V.P. オディネット

1.システムJに、ビット単䜍のa m a m-1 ... a 2 a 1ず曞かれたベヌスrの自然数があるずしたす。 これに1、2、3、...、r-1を順番に掛けお、結果の補品にカテゎリの芏則に埓っお1぀䞋に眲名したす。 その結果、m + 1列巊偎の空のスペヌスをれロで埋めるを取埗したす。各列にはr-1桁が含たれおいたす。 列内の数字の䜍眮は列衚珟ず呌ばれたす。 すべおの皮類の数に1、2、...、r-1を乗算するず、無限の数の衚珟が生成されたす。 ただし、 異なる衚珟の数は有限であり、匏で䞎えられたす


ここで、φnは自然数の集合Nで定矩されたオむラヌ関数であり、その倀n∈Nの堎合は、nを超えず、nず互いに玠な自然数の数に等しくなりたす。

2.ここで、r = 10、぀たり Jは10進数です。 次に、2぀の隣接するFarey分数p i / q iずp i + 1 / q i + 1の間の数倀1、2、3、...、9で囲たれた分数の積は、結果の数倀の敎数郚に察しお同じ衚珟を䞎えたす。そしお、Faray分数p i / q iの数字1、2、3、... 9による積のシヌケンスの敎数郚

蚘事党文はこちら 。

蚀葉遣いは私には圹に立たなかった。 定理の蚌明を怜玢しなかったので、いわば、スロニムスキヌの蚀葉を取った。 私の問題に察するこの定理の重芁な瞬間は、「 異なる衚珟の数は有限であり、匏で䞎えられる...」ずいうこずでした。 そしお、定理ずSlonimskyデバむスの蚭蚈から、10進法の堎合、列の衚珟は280ありたす。

スロニムスキヌ衚


同じ数孊的アむデアに基づいお動䜜するデバむスを再䜜成するために、䞊蚘の蚘事で説明したアルゎリズムに埓っおSlonimskyテヌブルを受け取りたした。
私はFireBugで歊装し、蚈算を始めたした。
蚘事の埌半では、JavaScriptフラグメントに遭遇したす。 この蚀語は私の職業掻動の基瀎であるため、私はそれを䜿甚したした。 それにもかかわらず、私が䜿甚する匏は十分に単玔であるため、蚀語の詳现が理解を耇雑にするこずはないず考えおいたす。たた、䞀郚の堎所では、他の蚀語のプログラマヌがコヌドをより理解しやすくするために、JavaScriptでは受け入れられおいない手法を具䜓的に䜿甚したした。

蚘事によるず、10進数システムの基本的なSlonimテヌブルを構築するために、Fareyシヌケンスが採甚されたした
F9= {0、1/9、1/8、1/7、1/6、1/5、2/9、1/4、2/7、1/3、3/8、2 / 5、3 / 7、4 / 9、1 / 2、5 / 9、4 / 7、3 / 5、5 / 8、2 / 3、5 / 7、3 / 4、7 / 9、4 / 5、 5 / 6、6 / 7、7 / 8、8 / 9、1}。 1を陀く28個のシヌケンスF9に、0から9たでの䞀連の数字をそれぞれ掛けお、埗られた補品の䞀郚のみを取埗したした。 結果の数倀列には、0から始たるFarey番号の昇順で番号が付けられたす。

衚の倀は、匏によっお取埗されたす
B[c][r] = Math.floor(F[c]*r); 

ここで、cは列番号、rは行番号です。

スロニムスキヌメむンテヌブルB
r \ c0123456789101112131415161718192021222324252627
00000000000000000000000000000
10000000000000000000000000000
20000000000000011111111111111
30000000001111111111222222222
40000000111111122222223333333
50000011111122222233333344444
60000111112222233333444445555
70001111122223333444455555666
80011111222333344445556666677
90111112223333445555666777778

完党なスロニムスキヌ衚を埗るために、補助衚Pが構築されたした。これは、ピタゎラス衚珟の0から9たでの数倀の乗算衚です。
 P[c][r] = c*r; 
r \ c0123456789
00000000000
10123456789
2024681012141618
30369121518212427
404812162024283236
5051015202530354045
6061218243036424854
7071421283542495663
8081624324048566472
9091827364554637281


テヌブルBの各列は、テヌブルPの各列ずベクトル的に結合されたす。したがっお、280列を含む䞭間テヌブルDUが取埗されたす。
 DU[b*10+p][r] = B[b][r] + P[p][r]; 
DU
c012345678910111213141516171819
b00000000001111111111
r \ p01234567890123456789
000000000000000000000
101234567890123456789
2024681012141618024681012141618
303691215182124270369121518212427
40481216202428323604812162024283236
5051015202530354045051015202530354045
6061218243036424854061218243036424854
7071421283542495663071421283542495663
8081624324048566472081624324048566472
90918273645546372811101928374655647382
継続
c20212223242526272829日30313233343536373839
b22222222223333333333
r \ p01234567890123456789
000000000000000000000
101234567890123456789
2024681012141618024681012141618
303691215182124270369121518212427
40481216202428323604812162024283236
5051015202530354045051015202530354045
6061218243036424854061218243036424854
707142128354249566318152229日3643505764
8191725334149576573191725334149576573
911019283746556473821101928374655647382
継続
c4041424344454647484950515253545556575859
b44444444445555555555
r \ p01234567890123456789
000000000000000000000
101234567890123456789
2024681012141618024681012141618
303691215182124270369121518212427
40481216202428323604812162024283236
5051015202530354045161116212631364146
6171319253137434955171319253137434955
718152229日364350576418152229日3643505764
8191725334149576573191725334149576573
911019283746556473821101928374655647382
継続
c6061626364656667686970717273747576777879
b66666666667777777777
r \ p01234567890123456789
000000000000000000000
101234567890123456789
2024681012141618024681012141618
303691215182124270369121518212427
4048121620242832361591317212529日3337
5161116212631364146161116212631364146
6171319253137434955171319253137434955
718152229日364350576418152229日3643505764
81917253341495765732101826344250586674
92112029日3847566574832112029日384756657483
継続
c8081828384858687888990919293949596979899
b88888888889999999999
r \ p01234567890123456789
000000000000000000000
101234567890123456789
2024681012141618024681012141618
3036912151821242714710131619222528
41591317212529日33371591317212529日3337
5161116212631364146161116212631364146
6171319253137434955281420263238445056
7291623303744515865291623303744515865
821018263442505866742101826344250586674
92112029日3847566574833122130394857667584
継続
c100101102103104105106107108109110111112113114115116117118119
b1010101010101010101011111111111111111111
r \ p01234567890123456789
000000000000000000000
101234567890123456789
2024681012141618024681012141618
31471013161922252814710131619222528
41591317212529日33371591317212529日3337
5161116212631364146271217222732374247
6281420263238445056281420263238445056
7291623303744515865291623303744515865
831119273543515967753111927354351596775
931221303948576675843122130394857667584
継続
c120121122123124125126127128129130131132133134135136137138139
b1212121212121212121213131313131313131313
r \ p01234567890123456789
000000000000000000000
101234567890123456789
2024681012141618024681012141618
31471013161922252814710131619222528
41591317212529日33371591317212529日3337
5271217222732374247271217222732374247
6281420263238445056281420263238445056
731017243138455259663101724313845525966
831119273543515967753111927354351596775
931221303948576675844132231404958677685
継続
c140141142143144145146147148149150151152153154155156157158159
b1414141414141414141415151515151515151515
r \ p01234567890123456789
000000000000000000000
101234567890123456789
2135791113151719135791113151719
31471013161922252814710131619222528
4261014182226303438261014182226303438
5271217222732374247271217222732374247
6391521273339455157391521273339455157
731017243138455259663101724313845525966
841220283644526068764122028364452606876
941322314049586776855142332415059687786
継続
c160161162163164165166167168169170171172173174175176177178179
b1616161616161616161617171717171717171717
r \ p01234567890123456789
000000000000000000000
101234567890123456789
2135791113151719135791113151719
31471013161922252814710131619222528
4261014182226303438261014182226303438
5271217222732374247381318232833384348
6391521273339455157391521273339455157
741118253239465360674111825323946536067
841220283644526068764122028364452606876
951423324150596877865142332415059687786
継続
c180181182183184185186187188189190191192193194195196197198199
b1818181818181818181819191919191919191919
r \ p01234567890123456789
000000000000000000000
101234567890123456789
2135791113151719135791113151719
31471013161922252825811141720232629日
4261014182226303438261014182226303438
5381318232833384348381318232833384348
63915212733394551574101622283440465258
741118253239465360674111825323946536067
85132129日3745536169775132129日374553616977
951423324150596877866152433425160697887
継続
c200201202203204205206207208209210211212213214215216217218219
b2020202020202020202021212121212121212121
r \ p01234567890123456789
000000000000000000000
101234567890123456789
2135791113151719135791113151719
325811141720232629日25811141720232629日
4261014182226303438371115192327313539
5381318232833384348381318232833384348
641016222834404652584101622283440465258
751219263340475461685121926334047546168
85132129日3745536169776142230384654627078
961524334251606978876152433425160697887
継続
c220221222223224225226227228229230231232233234235236237238239
b2222222222222222222223232323232323232323
r \ p01234567890123456789
000000000000000000000
101234567890123456789
2135791113151719135791113151719
325811141720232629日25811141720232629日
4371115192327313539371115192327313539
53813182328333843484914192429日34394449
641016222834404652584101622283440465258
751219263340475461685121926334047546168
861422303846546270786142230384654627078
971625344352617079887162534435261707988
継続
c240241242243244245246247248249250251252253254255256257258259
b2424242424242424242425252525252525252525
r \ p01234567890123456789
000000000000000000000
101234567890123456789
2135791113151719135791113151719
325811141720232629日25811141720232629日
4371115192327313539371115192327313539
54914192429日343944494914192429日34394449
6511172329日3541475359511172329日3541475359
751219263340475461686132027344148556269
861422303846546270786142230384654627078
971625344352617079887162534435261707988
継続
c260261262263264265266267268269270271272273274275276277278279
b2626262626262626262627272727272727272727
r \ p01234567890123456789
000000000000000000000
101234567890123456789
2135791113151719135791113151719
325811141720232629日25811141720232629日
4371115192327313539371115192327313539
54914192429日343944494914192429日34394449
6511172329日3541475359511172329日3541475359
761320273441485562696132027344148556269
871523313947556371797152331394755637179
971625344352617079888172635445362718089


それに基づいお、ナニットのカテゎリの桁ず数十の受信金額のカテゎリをそれぞれ含む2぀のテヌブルUずDが構築されたす。
 U[c][r] = DU[c][r] % 10; D[c][r] = Math.floor(DU[c][r]/10); 

うん
c012345678910111213141516171819
b00000000001111111111
r \ p01234567890123456789
000000000000000000000
101234567890123456789
202468024680246802468
303692581470369258147
404826048260482604826
505050505050505050505
606284062840628406284
707418529630741852963
808642086420864208642
909876543211098765432
q00581114171923270158111417192327
継続
c20212223242526272829日30313233343536373839
b22222222223333333333
r \ p01234567890123456789
000000000000000000000
101234567890123456789
202468024680246802468
303692581470369258147
404826048260482604826
505050505050505050505
606284062840628406284
707418529631852963074
819753197531975319753
910987654321098765432
q01581114171923270158111417202327
継続
c4041424344454647484950515253545556575859
b44444444445555555555
r \ p01234567890123456789
000000000000000000000
101234567890123456789
202468024680246802468
303692581470369258147
404826048260482604826
505050505051616161616
617395173951739517395
718529630741852963074
819753197531975319753
910987654321098765432
q01581114172023270158111417202327
継続
c6061626364656667686970717273747576777879
b66666666667777777777
r \ p01234567890123456789
000000000000000000000
101234567890123456789
202468024680246802468
303692581470369258147
404826048261593715937
516161616161616161616
617395173951739517395
718529630741852963074
819753197532086420864
921098765432109876543
q01681114172023270268111418202327
継続
c8081828384858687888990919293949596979899
b88888888889999999999
r \ p01234567890123456789
000000000000000000000
101234567890123456789
202468024680246802468
303692581471470369258
415937159371593715937
516161616161616161616
617395173952840628406
729630741852963074185
820864208642086420864
921098765433210987654
q02681214182023270269121418202427
継続
c100101102103104105106107108109110111112113114115116117118119
b1010101010101010101011111111111111111111
r \ p01234567890123456789
000000000000000000000
101234567890123456789
202468024680246802468
314703692581470369258
415937159371593715937
516161616162727272727
628406284062840628406
729630741852963074185
831975319753197531975
932109876543210987654
q02691214182024270269121418202427
継続
c120121122123124125126127128129130131132133134135136137138139
b1212121212121212121213131313131313131313
r \ p01234567890123456789
000000000000000000000
101234567890123456789
202468024680246802468
314703692581470369258
415937159371593715937
527272727272727272727
628406284062840628406
730741852963074185296
831975319753197531975
932109876544321098765
q03691214182024270369131418202427
継続
c140141142143144145146147148149150151152153154155156157158159
b1414141414141414141415151515151515151515
r \ p01234567890123456789
000000000000000000000
101234567890123456789
213579135791357913579
314703692581470369258
426048260482604826048
527272727272727272727
639517395173951739517
730741852963074185296
842086420864208642086
943210987655432109876
q03791314182124270379131518212427
継続
c160161162163164165166167168169170171172173174175176177178179
b1616161616161616161617171717171717171717
r \ p01234567890123456789
000000000000000000000
101234567890123456789
213579135791357913579
314703692581470369258
426048260482604826048
527272727273838383838
639517395173951739517
741852963074185296307
842086420864208642086
954321098765432109876
q03791315182125270379131518212527
継続
c180181182183184185186187188189190191192193194195196197198199
b1818181818181818181819191919191919191919
r \ p01234567890123456789
000000000000000000000
101234567890123456789
213579135791357913579
314703692582581470369
426048260482604826048
538383838383838383838
639517395174062840628
741852963074185296307
853197531975319753197
954321098766543210987
q03791315182125270479131519212527
継続
c200201202203204205206207208209210211212213214215216217218219
b2020202020202020202021212121212121212121
r \ p01234567890123456789
000000000000000000000
101234567890123456789
213579135791357913579
325814703692581470369
426048260483715937159
538383838383838383838
640628406284062840628
752963074185296307418
853197531976420864208
965432109876543210987
q047913161921252704710131619212627
継続
c220221222223224225226227228229230231232233234235236237238239
b2222222222222222222223232323232323232323
r \ p01234567890123456789
000000000000000000000
101234567890123456789
213579135791357913579
325814703692581470369
437159371593715937159
538383838384949494949
640628406284062840628
752963074185296307418
864208642086420864208
976543210987654321098
q0471013161922262704710131619222627
継続
c240241242243244245246247248249250251252253254255256257258259
b2424242424242424242425252525252525252525
r \ p01234567890123456789
000000000000000000000
101234567890123456789
213579135791357913579
325814703692581470369
437159371593715937159
549494949494949494949
651739517395173951739
752963074186307418529
864208642086420864208
976543210987654321098
q0471013161922262704810131619222627
継続
c260261262263264265266267268269270271272273274275276277278279
b2626262626262626262627272727272727272727
r \ p01234567890123456789
000000000000000000000
101234567890123456789
213579135791357913579
325814703692581470369
437159371593715937159
549494949494949494949
651739517395173951739
763074185296307418529
875319753197531975319
976543210988765432109
q0481013161922262704810131619222727

D
c012345678910111213141516171819
b00000000001111111111
r \ p01234567890123456789
000000000000000000000
100000000000000000000
200000111110000011111
300001112220000111222
400011222330001122233
500112233440011223344
600112334450011233445
700122344560012234456
800123445670012344567
900123456780112345678
q00581114171923270158111417192327
継続
c20212223242526272829日30313233343536373839
b22222222223333333333
r \ p01234567890123456789
000000000000000000000
100000000000000000000
200000111110000011111
300001112220000111222
400011222330001122233
500112233440011223344
600112334450011233445
700122344560012234556
800123445670012344567
901123456780112345678
q01581114171923270158111417202327
継続
c4041424344454647484950515253545556575859
b44444444445555555555
r \ p01234567890123456789
000000000000000000000
100000000000000000000
200000111110000011111
300001112220000111222
400011222330001122233
500112233440011223344
600112334450011233445
700122345560012234556
800123445670012344567
901123456780112345678
q01581114172023270158111417202327
継続
c6061626364656667686970717273747576777879
b66666666667777777777
r \ p01234567890123456789
000000000000000000000
100000000000000000000
200000111110000011111
300001112220000111222
400011222330001122233
500112233440011223344
600112334450011233445
700122345560012234556
800123445670112345567
901223456780122345678
q01681114172023270268111418202327
継続
c8081828384858687888990919293949596979899
b88888888889999999999
r \ p01234567890123456789
000000000000000000000
100000000000000000000
200000111110000011111
300001112220001111222
400011222330001122233
500112233440011223344
600112334450012233455
700123345560012334556
801123455670112345567
901223456780123345678
q02681214182023270269121418202427
継続
c100101102103104105106107108109110111112113114115116117118119
b1010101010101010101011111111111111111111
r \ p01234567890123456789
000000000000000000000
100000000000000000000
200000111110000011111
300011112220001111222
400011222330001122233
500112233440011223344
600122334550012233455
700123345560012334556
801123455670112345567
901233456780123345678
q02691214182024270269121418202427
継続
c120121122123124125126127128129130131132133134135136137138139
b1212121212121212121213131313131313131313
r \ p01234567890123456789
000000000000000000000
100000000000000000000
200000111110000011111
300011112220001111222
400011222330001122233
500112233440011223344
600122334550012233455
701123345560112334556
801123455670112345567
901233456780123445678
q03691214182024270369131418202427
継続
c140141142143144145146147148149150151152153154155156157158159
b1414141414141414141415151515151515151515
r \ p01234567890123456789
000000000000000000000
100000000000000000000
200000111110000011111
300011112220001111222
400111223330011122333
500112233440011223344
600122334550012233455
701123345560112334556
801223456670122345667
901234456780123455678
q03791314182124270379131518212427
継続
c160161162163164165166167168169170171172173174175176177178179
b1616161616161616161617171717171717171717
r \ p01234567890123456789
000000000000000000000
100000000000000000000
200000111110000011111
300011112220001111222
400111223330011122333
500112233440011223344
600122334550012233455
701123345660112334566
801223456670122345667
901234556780123455678
q03791315182125270379131518212527
継続
c180181182183184185186187188189190191192193194195196197198199
b1818181818181818181819191919191919191919
r \ p01234567890123456789
000000000000000000000
100000000000000000000
200000111110000011111
300011112220001112222
400111223330011122333
500112233440011223344
600122334550112234455
701123345660112334566
801223456670122345667
901234556780123456678
q03791315182125270479131519212527
継続
c200201202203204205206207208209210211212213214215216217218219
b2020202020202020202021212121212121212121
r \ p01234567890123456789
000000000000000000000
100000000000000000000
200000111110000011111
300011122220001112222
400111223330011122333
500112233440011223344
601122344550112234455
701123445660112344566
801223456670123345677
901234566780123456678
q047913161921252704710131619212627
継続
c220221222223224225226227228229230231232233234235236237238239
b2222222222222222222223232323232323232323
r \ p01234567890123456789
000000000000000000000
100000000000000000000
200000111110000011111
300011122220001112222
400111223330011122333
500112233440011223344
601122344550112234455
701123445660112344566
801233456770123345677
901234567780123456778
q0471013161922262704710131619222627
継続
c240241242243244245246247248249250251252253254255256257258259
b2424242424242424242425252525252525252525
r \ p01234567890123456789
000000000000000000000
100000000000000000000
200000111110000011111
300011122220001112222
400111223330011122333
500112233440011223344
601122344550112234455
701123445660122344566
801233456770123345677
901234567780123456778
q0471013161922262704810131619222627
継続
c260261262263264265266267268269270271272273274275276277278279
b2626262626262626262627272727272727272727
r \ p01234567890123456789
000000000000000000000
100000000000000000000
200000111110000011111
300011122220001112222
400111223330011122333
500112233440011223344
601122344550112234455
701223445660122344566
801233456770123345677
901234567780123456788
q0481013161922262704810131619222727


単䜍排出テヌブルUには非反埩列が含たれ、10の排出テヌブルDのすべおの列はテヌブルUずテヌブルBの䞡方にあるこずがわかりたした。

したがっお、テヌブルUは生成されたすべおの列を䜿い果たしたす。 したがっお、これは完党なSlonimテヌブルです。

さらなる䜜業の䟿宜䞊、テヌブルDの各列がテヌブルBのどの列ず䞀臎するかをマヌクし、同じ番号で同じ数のテヌブルU䞡方のテヌブルの行qの列をマヌクし、さらに䟿利なように、指定された倀を含む配列Qを導入したした、衚DおよびUの列番号に察応する番号の䞋
Q
 Q = [0, 0, 5, 8, 11, 14, 17, 19, 23, 27, 0, 1, 5, 8, 11, 14, 17, 19, 23, 27, 0, 1, 5, 8, 11, 14, 17, 19, 23, 27, 0, 1, 5, 8, 11, 14, 17, 20, 23, 27, 0, 1, 5, 8, 11, 14, 17, 20, 23, 27, 0, 1, 5, 8, 11, 14, 17, 20, 23, 27, 0, 1, 6, 8, 11, 14, 17, 20, 23, 27, 0, 2, 6, 8, 11, 14, 18, 20, 23, 27, 0, 2, 6, 8, 12, 14, 18, 20, 23, 27, 0, 2, 6, 9, 12, 14, 18, 20, 24, 27, 0, 2, 6, 9, 12, 14, 18, 20, 24, 27, 0, 2, 6, 9, 12, 14, 18, 20, 24, 27, 0, 3, 6, 9, 12, 14, 18, 20, 24, 27, 0, 3, 6, 9, 13, 14, 18, 20, 24, 27, 0, 3, 7, 9, 13, 14, 18, 21, 24, 27, 0, 3, 7, 9, 13, 15, 18, 21, 24, 27, 0, 3, 7, 9, 13, 15, 18, 21, 25, 27, 0, 3, 7, 9, 13, 15, 18, 21, 25, 27, 0, 3, 7, 9, 13, 15, 18, 21, 25, 27, 0, 4, 7, 9, 13, 15, 19, 21, 25, 27, 0, 4, 7, 9, 13, 16, 19, 21, 25, 27, 0, 4, 7, 10, 13, 16, 19, 21, 26, 27, 0, 4, 7, 10, 13, 16, 19, 22, 26, 27, 0, 4, 7, 10, 13, 16, 19, 22, 26, 27, 0, 4, 7, 10, 13, 16, 19, 22, 26, 27, 0, 4, 8, 10, 13, 16, 19, 22, 26, 27, 0, 4, 8, 10, 13, 16, 19, 22, 26, 27, 0, 4, 8, 10, 13, 16, 19, 22, 27, 27]; 


アルゎリズム察決



最初に、テヌブルDUのb = 0の列のグルヌプがピタゎラスのテヌブルず䞀臎するこずに気付きたした。
c0123456789
b0000000000
r \ p0123456789
00000000000
10123456789
2024681012141618
30369121518212427
404812162024283236
5051015202530354045
6061218243036424854
7071421283542495663
8081624324048566472
9091827364554637281

2番目の芳察テヌブルUからp = 0の列を遞択するず、それらで構成されるテヌブルはテヌブルBず䞀臎したす。
c0102030405060708090100110120130
b012345678910111213
r \ p00000000000000
000000000000000
100000000000000
200000000000000
300000000011111
400000001111111
500000111111222
600001111122222
700011111222233
800111112223333
901111122233334
q00000000000000
継続
c140150160170180190200210220230240250260270
b1415161718192021222324252627
r \ p00000000000000
000000000000000
100000000000000
211111111111111
311111222222222
422222223333333
522233333344444
633333444445555
733444455555666
844445556666677
945555666777778
q00000000000000

したがっお、テヌブルDの各列D [i]は、b = Q [i]、p = 0の列ずしおテヌブルUに含たれたす。

明らかに、2぀の数倀の積の最埌の桁は、これらの数倀の最埌の桁の積の最埌の桁に等しくなりたす。 したがっお、テヌブルUのれログルヌプから乗算された最埌の桁に等しい数の䞋の列を取る堎合、これは䞀連の1桁の数字で乗算された数の補品のコンパむルされたテヌブルの最埌の列になりたす。

次に、qが次の桁の列を取埗するグルヌプの番号であるず想定したした。 グルヌプ0から始めるこずにしたした。
FireBugを䜿甚しお蚈算実隓を実斜したした-刀明したようです。

たずえば、ランダムな4桁の実隓が単玔すぎないように番号を取りたす。 蚘事の準備では、次のようにしたした。
 value = (100 + Math.floor(Math.random()*(999-100)))*10 + 1 + Math.floor(Math.random()*(9-1)); 

このような匏により、少なくずも1000の数が取埗され、ナニットのカテゎリにれロがなくなりたす。
蚘事の極端なアセンブリでは、randomが倀= 3212をくれたした。
テヌブルU列2のグルヌプ0から取埗したす。
c2
b0
r \ p2
00
12
24
36
48
50
62
74
86
98
q5

q = 5であるこずがわかりたす。次の攟電では、グルヌプ5から列1を取埗したす。
c512
b50
r \ p12
000
112
224
336
448
560
672
784
896
908
q15

この列q = 1に察しお、同じ方法でテヌブルを継続するず、次の結果が埗られたす。
c5312512
b5150
r \ p3212
00000
13212
26424
39636
42848
56060
69272
72484
85696
98908
q8515

次のq = 8で数字がなくなっおいたす。明らかに、グルヌプ8かられロ列を取埗する必芁がありたす。 取埗するもの
c805312512
b85150
r \ p03212
000000
103212
206424
309636
412848
516060
619272
722484
825696
928908
q08515

この衚の行には、3212の0、1、2、... 9の積があるこずがわかりたす。

実隓分析

これがなぜ機胜するのかを理解するのは困難でした。
したがっお、10列の28グルヌプ0〜27がありたす。 グルヌプには、衚Bの列ず同じ番号が割り圓おられたす。
テヌブルDU、U、およびDでは、行bにはグルヌプ番号が含たれ、行pにはグルヌプ内の列番号が含たれたす。

機胜を玹介したす。
数倀にベクトル{0;を掛ける関数。 1; 2; 3; 4; 5; 6; 7; 8; 9}ベクトルは配列で衚されたす
 function mul(n){ var result = new Array(10); for(var i=0; i<10; ++i){ result[i]=n*i; } return result; } 

2぀の配列のベクトル加算関数
 function sum(a, b){ var result = new Array(10); for(var i=0; i<10; ++i){ result[i]=a[i]+b[i]; } return result; } 

゜ヌス配列の倀の単䜍の攟電倀を含む配列を取埗する機胜
 function unit(a){ var result = new Array(10); for(var i=0; i<10; ++i){ result[i]=a[i] % 10; } return result; } 

元の配列の数十の倀の攟電倀を含む配列を取埗する機胜
 function deca(a){ var result = new Array(10); for(var i=0; i<10; ++i){ result[i]=Math.floor(a[i] / 10); } return result; } 

数匏を比范するず、テヌブルPの各列が列番号のmul関数の結果にすぎないこずがわかりたす。
テヌブルDおよびUの列は、それぞれunitおよびdeca関数を䜿甚しお、テヌブルDUの列から取埗されたす。
テヌブルDUの各列は、テヌブルBの1぀の列ずテヌブルPの1぀の列を合蚈するこずによっお取埗されたす。これは、 合蚈関数の䜿甚に察応したす。

マルチビット数にシングルビット列を掛けるアルゎリズムを思い出しおください。
させる
a n a n-1 ... a 1 a 0-乗算、ビットごずに曞き蟌たれたす。
bは1桁の係数です。
n + 1 c n ... c 1 c 0-結果はビット単䜍で曞き蟌たれたす結果は被乗数よりも1ビット長いず仮定したす。ほずんどの堎合、それはそうです、残りの郚分では-先行れロから誰も死亡しおいたせん。
m 0 、m 1 、... m n-高䜍に転送された倀玙で蚈算する堎合、それらは「䞊」に曞き蟌たれたす;
floor-切り捚お機胜;
-陀算の残りを取埗する操䜜。
倉数xはロヌカルずしお䜿甚され、各桁で再蚈算されたす。

1.乗法テヌブル各自がメモリに持っおいたすから、乗数のれロビットず係数の積を取埗したす。
x = a 0 * b;
倉曎なしのxの単䜍の攟電が結果に曞き蟌たれたすc 0 = x10;
数十の攟電xが「䞊」に曞かれおいたすm 0 =床x / 10。

2.乗算衚から、乗数の最初の桁ず係数の積を取埗し、それに「䞊から」の倀を远加したす。
x = a 1 * b + m 0
ナニットの攟電-結果ぞの曞き蟌みc 1 = x10;
数十-「䞊」ず曞くm 1 =床x / 10。

3.ビット2からnに぀いおも同じこずを行いたす。
x = a i * b + m i-1
c i = x10;
m i =床x / 10。

4.攟電nの蚈算時に取埗されたm nの倀は、結果の最埌の桁を瀺したす。
c n + 1 = m n 。


誰もが同意するず思う 説明に誀りはありたすか その埌、さらに考えたす。

Slonimskyテヌブルは、0から9たでの䞀連の数字で任意の数字の積を取埗するのに圹立ちたす。
列で乗算するこずにした堎合、乗数を10回乗算し、 n + 1 c n ... c 1 c 0ず10個の因子それぞれのm 0 、m 1 、... m nのセットを取埗したす。
Slonimskyアルゎリズムを開きたいので、乗算結果の列に察応するテヌブルUの列の番号を栌玍する別の配列j 0 ... j n + 1を導入したす。

蚘録フォヌムを簡玠化するために、導入した関数を䜿甚し、䞊蚘のアルゎリズムの同じポむントを通過したす。
1.蚈算する
x = mula 0 ;
明らかに、xはピタゎラス衚Pの列番号a 0ず䞀臎し、興味深いこずに、衚DUの列p = a 0 、b = 0ず䞀臎したす。 テヌブルDU、U、およびDでは、列番号はb * 10 + pずしお蚈算されるため、
x = DU [a 0 ]
ここで、結果に曞き蟌むナニットず、「アップ」を曞き蟌む数十個が必芁です。
c 0 =単䜍x;
m 0 =デカx;
この堎合、c 0ずm 0は配列です。
c 0はテヌブルUの列p = a 0 、b = 0ずたったく同じ方法で取埗され、m 0はテヌブルDの察応する列ずしお取埗されるこずに泚意しおください。
私たちは曞きたす
j 0 = a 0 ;
c 0 = U [j 0 ];
m 0 = D [j 0 ]。

2.次のランクを取りたしょう。 ベクトルで積a 1を蚈算し、結果の配列ベクトルに配列m 0を远加する必芁がありたす。
x = summula 1 、m 0 ;
この匏を解析したす
mula 1 は列P [a 1 ]ず䞀臎したす。

ステップ1では、次の蚈算が行われたした。
m 0 = D [j 0 ]。
ここで、テヌブルDの各列に察しおqがあり、この列がテヌブルBに含たれおいるこずを思い出しおください。䟿宜䞊、この番号をテヌブルUおよびDの行qおよび配列Qに曞き蟌みたした
今曞く
m 0 = D [j 0 ] = B [Q [j 0 ]];
プログラマヌず数孊者にスタむルのこのような混合物を蚱しおください。

䞡方の甚語が逆アセンブルされたす。 今、量を芚えおおいおください。 条件の1぀はテヌブルPのメンバヌであり、もう1぀はテヌブルBのメンバヌです。このケヌスのすべおの金額が蚈算され、テヌブルDUに含たれたす。
したがっお、必芁な配列は、p = a 1 、b = Q [j 0 ]であるテヌブルDUの列ず䞀臎する必芁がありたす。
x = DU [Q [j 0 ] * 10 + a 1 ]。
ここでも、ナニットず数十のxメンバヌが必芁です。
c 1 =単䜍x;
m 1 =デカx;
たた、テヌブルUずDが再び圹立ちたす。

2番目のステップを芁玄するには
j 1 = Q [j 0 ] * 10 + a 1 ;
c 1 = U [j 1 ];
m 1 = D [j 1 ]。

3.パタヌンに既に気づくこずができたす
x = summula i 、m i-1 ;
同様に
mula i = P [a i ]、
m i-1 = D [j i-1 ] = B [Q [j i-1 ]];
その埌
x = DU [Q [j i-1 ] * 10 + a i ]。
したがっお
j i = Q [j i-1 ] * 10 + a i ;
c i = U [j i ];
m i = D [j i ]。

4. m nをどうするか芋おみたしょう。
最埌の退院転送は、結果の䞊玚退院です。 ただし、テヌブルUの列を遞択する必芁がありたす。
分析したしょう
m n = D [j n ]。
D [j n ]はテヌブルUに列b = Q [j n ]、p = 0ずしお入力したす。぀たり、
D [j n ] = U [Q [j n ] * 10]。
したがっお
j n + 1 = Q [j n ] * 10;
c n + 1 = U [j n + 1 ]。
1桁の数の積は2桁を超える数を生成できないため、配列m n + 1にはれロのみが含たれたす。 蚈算が完了したした。

次に、芋぀かったj iの方皋匏をたずめたす。
j 0 = a 0 ;
j i = Q [j i-1 ] * 10 + a i ;
j n + 1 = Q [j n ] * 10。
圌らは1぀の方皋匏になりたす
j i = Q [j i-1 ] * 10 + a i 、
あなたがそれを受け入れるなら
a n + 1 = 0これは、乗数に先行れロを割り圓おるこずず同等です、
Q [j -1 ] = 0。

぀たり、数字の積の衚a n a n-1 ... a 1 a 0を衚Uの列の1桁の数に远加するには、列b = Q [j i-1 ]から列p = a iを取る必芁がありたす。 、およびテヌブルの同じ列の行qは、どの列グルヌプが次にあるかを瀺し、列グルヌプ0から開始する必芁がありたす。

実隓で瀺されたアルゎリズムは分析的に導き出されおいたす。

芁玄するず

怜出されたアルゎリズムは自動ず説明できたす。入力行は右から巊最䞋䜍から最䞊䜍に読み取られた乗算数であり、状態は列グルヌプの数です。 䜜業の各段階で、状態番号の䞋のグルヌプから次の桁の番号の䞋の列を取埗し、この列の行qからの番号の䞋の状態に入りたす。
アルゎリズムを正しく完了するには、乗数に先行れロを远加する必芁がありたす。

マテリアル実装

このセクションは、蚘事に特に関連するものではないため、含めるこずはできたせん。 しかし、ショヌのために、それをさせおください。

スロニムの「シェル」もむオフのバヌも私によっお修埩されたせんでした。 本物のコピヌを再䜜成するには、補品自䜓に関する詳现情報が必芁です。

私は、補品が時代錯誀ではない時代の実写RIで䜿甚するこずを目的ずしお、このバヌゞョンの機噚を䜜成したした。たた、操䜜アルゎリズムの本栌的なデモンストレヌションも行いたした。
歎史的モデルに察する信頌性は想定されおいたせんでした。 焊点は䜿いやすさにありたした。

操䜜の芳点から、列は、グルヌプおよび番号で簡単に゜ヌトできるように、媒䜓に配眮する必芁がありたす。 さらに、操䜜アルゎリズムに基づいお、最初に目的のグルヌプを遞択し、次に目的の列を遞択する必芁がありたす。

Ioffeのように、四面䜓の棒に柱を郜合よく配眮するこずは䞍可胜だったず蚀わなければなりたせん。 Ioffeバヌはそれほど快適ではなかったず思いたす。

10列の28グルヌプは、䞡偎のレヌルに䟿利に配眮されたす。 さらに、列の各グルヌプは、独自の5぀のレヌルに適甚されたした。

レヌルに適甚される情報の量を枛らすために、テヌブルのれロ行はレヌルに適甚されたせんでした。 すべおの列に番号0が含たれおいたす。列番号は個別に適甚されたせんでした。 テヌブルの最初の行の番号ず䞀臎したす。 熊手が属するグルヌプの番号は、レむキの偎面にロヌマ数字で印刷されおいたした。 偶発的な混合の堎合にレヌルを゜ヌトするためにのみ必芁です操䜜䞭は避ける必芁がありたす。

列のq倀は、氎平分割線の䞋の各レヌルにプロットされたす。

スラットは、50x2 mmのアルミニりムストリップでできおいたす。これは、玄4〜6 mmの電動ゞグ゜ヌで切断されたした幅が狭すぎる堎合は拒吊され、幅が広すぎる堎合は研磚ディスクで研磚されるか、拒吊されたす。
数字は圫刻カッタヌで印刷されたす。
スラットを保管するために、50x40 mmの束の梁から朚補のオヌガナむザヌが開けられたした。 はい、私は䜕がよりよく考えられるか知っおいたす、しかし、ゲヌムの前に2日が残りたした、そしお、2800桁を圫った埌の軍隊は尜きおいたした。
グルヌプず列の数は、オヌガナむザヌ䞊でゞェルペンでマヌクされたす。

画像が消える䞍思議な䞍具合のため、写真はコメントhabrahabr.ru/post/232255/#comment_7940351を䜿甚しお远加されたした

゜ヌス


1. スィクティフカル倧孊玀芁。 Ser。1。 発行13.2011。 UDC 512.6、517.987「Kh.Z. Demid Prizeに莈られたコンピュヌタヌのクリ゚むタヌの200呚幎蚘念。 スロニムスキヌずG.クンマヌ。」 V.P. オディネット ;
2. Slonimskyの定理ずそれに基づく単玔なコンピュヌティングデバむス 。

PSお䜿いのサヌバヌがSpirit of the Machineを祝犏しおください。200kb近くのコヌドを送信し、゚スケヌプを考慮に入れお、500を超えお生き残ったからです。

Source: https://habr.com/ru/post/J232255/


All Articles