個人的に進めてる『コンピュータシステムの理論と実装』の実装メモを書きますよ。
今回はCPUを作るのが山場でした。
「第5章 コンピュータアーキテクチャ」ではHackコンピュータというこの本オリジナルのコンピュータを作ります。前章まででALU、レジスタやプログラムカウンタなんかは作ってあるので、それらを組合せてなんとかします。
命令メモリ、CPU、データメモリを合体させるとHackコンピュータになるらしい(P.105、5.3.3)。メモリは前章のRAMを利用すればすぐ作れるので、問題はCPUを作ることです。
P.102に概略図が載ってるのでそのとおりに作るんですが、詳細が省かれてるので実際にHDLで書こうとすると大変でした。この本は実践に重きを置いているので、詳細を省いているのはたぶん意図的です。実装を通じて学んで欲しいということでしょう。
下に私の考えた実装コードを載せますけど、本の思想に忠実に自分で考えたいというひとはネタバレ注意です。(GW中にやったけどハマった部分があって3日ぐらいかかってしまったw)
2015-05-26
2015-04-19
AND、ORだけではNOT回路は作れないのか
「コンピュータシステムの理論と実装」読書会のときの疑問を追っかけて考えてみました。
NotとAnd/Orからならすべての論理回路が作れることは分かりました。ではAnd、OrのみからNot回路は作れないのでしょうか?
直感的に「作れない」って感じるんですが、きちんと論理的に説明するのはけっこう難しい気がします。
ではどうやったら説明できるか。
Notは1入力1出力の回路です。まずは入力をaとおきます。最初の入力の可能性としてはa、定数0、定数1のどれかしかありません。
最初の入力から次の出力の可能性は次の表の通りです。やっぱりa,0,1のどれかになってしまいます。
つぎに1出力ってことを考えます。And、Orのみで回路を作るならケーブルをまとめる最後の素子はAndまたはOrのどっちかになります。そして回路の最初の入力も次の出力もa,0,1になってるので、最後の出力もやっぱりa,0,1になってしまう。
雑に図解するとこんな感じ。
途中の回路がどんな複雑でもAnd/Orのみなら中間出力も変わらないので、最後の論理素子の入力も変わらない。だから最後までNot aを作ることはできない。
……という説明を考えてみたけど、なんだかすっきりしない。背理法か何かでさっぱりと証明する方法はないのかなー。
追記:ツイートしたら@chiralさんが速攻で返信くれました。だいぶすっきりした!
NotとAnd/Orからならすべての論理回路が作れることは分かりました。ではAnd、OrのみからNot回路は作れないのでしょうか?
直感的に「作れない」って感じるんですが、きちんと論理的に説明するのはけっこう難しい気がします。
ではどうやったら説明できるか。
Notは1入力1出力の回路です。まずは入力をaとおきます。最初の入力の可能性としてはa、定数0、定数1のどれかしかありません。
最初の入力から次の出力の可能性は次の表の通りです。やっぱりa,0,1のどれかになってしまいます。
入力1 | 入力2 | And出力 | Or出力 |
---|---|---|---|
a | 0 | 0 | a |
a | 1 | a | 1 |
a | a | a | a |
0 | 0 | 0 | 0 |
0 | 1 | 0 | 1 |
1 | 1 | 1 | 1 |
つぎに1出力ってことを考えます。And、Orのみで回路を作るならケーブルをまとめる最後の素子はAndまたはOrのどっちかになります。そして回路の最初の入力も次の出力もa,0,1になってるので、最後の出力もやっぱりa,0,1になってしまう。
雑に図解するとこんな感じ。
途中の回路がどんな複雑でもAnd/Orのみなら中間出力も変わらないので、最後の論理素子の入力も変わらない。だから最後までNot aを作ることはできない。
……という説明を考えてみたけど、なんだかすっきりしない。背理法か何かでさっぱりと証明する方法はないのかなー。
追記:ツイートしたら@chiralさんが速攻で返信くれました。だいぶすっきりした!
@deltam それを実現する段数が最小の回路をXとしましょう。いま、出力が1だとすると、出力の手前の素子Yへの入力は(Xの段数最小性より)全てゼロのはずです。するとYがANDでもORでも入力が全てゼロなら出力は決して1にならないので矛盾。
Q.E.D.
— ITコンサルタント (@chiral) 2015, 4月 19
2015-04-17
#nandris コンピュータシステムの理論と実装 読書会(2) に参加してきました
「コンピュータシステムの理論と実装」は論理回路から順を追ってコンピュータの仕組みを知ろうという教科書です。
Nand回路から初めて論理回路、加算器から機械語、OSや高級言語のコンパイラを経てテトリスを作っちゃおうという、デアゴスティーニでやりそうな構成。
この本の内容はNand2Tetrisというオンライン学習コースで、私はこのTED Talksで知りました。
Nand回路から初めて論理回路、加算器から機械語、OSや高級言語のコンパイラを経てテトリスを作っちゃおうという、デアゴスティーニでやりそうな構成。
この本の内容はNand2Tetrisというオンライン学習コースで、私はこのTED Talksで知りました。
2014-12-31
素数腕立て伏せ Advent Calendar まとめ #prime_num_pushups
素数腕立て伏せってなんじゃ?という方はまずこちらをどうぞ。
素数腕立て伏せについて : サルノオボエガキ
ACの経過を一覧表にまとめました。リンク集としてお使いくださいませ。
けっきょく全体の勝率は3割2分でした。
素数腕立て伏せについて : サルノオボエガキ
ACの経過を一覧表にまとめました。リンク集としてお使いくださいませ。
けっきょく全体の勝率は3割2分でした。
素数腕立て伏せ Advent Calendar 31日目(最終回) #prime_num_pushups
素数腕立て伏せってなんじゃ?という方はまずこちらをどうぞ。
素数腕立て伏せについて : サルノオボエガキ
最終回じゃー!
31日目
58回で負け(合成数)
負けだけど連続での素数腕立て伏せでは最高の回数だ。30ぐらいでもまだ余裕があったので「イケるかな?」と思ってガンバった。
欲を言えば59(素数)までやって勝ちで終わりたかったけど、まぁいいや。
$ 58 = 3^2 + 7^2 $
Alphaちゃんによると58はIdoneal numberだとのこと。
日本語でなんていうのか分からなかったけど英語版Wikipediaによるとこんな数らしいです。
うーむ、こういうことかな。
正整数Dがidoneal numberであるならば、整数x,yによって
\[n = x^2 \pm Dy^2 \]
と書いたとき(ただし$x^2$と$Dy^2$は互いに素)、値nを素数か素数のべき乗およびそれらの2倍にできる。
(定義が複雑でよく分からん。これで正しいのか?)
$ 3^2 + 58*1^2 = 67 $で素数ですね。他に適当にemacs lispで計算してみると($58=2*29$なのでxを2の倍数にすると互いに素にならないのでNG)、
あれ、なんかすごくないこれ? Wikipediaによるとこの系列には無限個の素数を含んでいるそうです。
算術級数定理と似てるけど等差数列にはならないから違いますね。
idoneal numberは意外にも有限みたいです。
カール・ガウスとオイラーによって今まで65個のidoneal numberが発見されていて、それで全部だと予想されていると。
なんかリーマン予想とも関係あるらしいけど、もう追い切れないので切り上げる!
素数腕立て伏せ一言コメント
とうとうACをやり遂げました(インド標準時とかイラン標準時とか知らんもーん)。
12月1日に比べると明らかに腕力が付きました。あといろんな自然数の性質に触れて楽しかった。
最後の最後にidoneal numberなんていうよく分からない数も出てきて、「俺たちの素数腕立て伏せはこれからだ!」と打ち切りエンドっぽく盛り上がりました(自分の中では)。
各記事のPVは二桁なんですが、2015年も素数腕立て伏せニストとして普及に努めていきまーす。(来年はQiitaを使おう)
あと2014年中に今までのまとめ一覧表をアップしまーす。
素数腕立て伏せについて : サルノオボエガキ
最終回じゃー!
31日目
58回で負け(合成数)
負けだけど連続での素数腕立て伏せでは最高の回数だ。30ぐらいでもまだ余裕があったので「イケるかな?」と思ってガンバった。
欲を言えば59(素数)までやって勝ちで終わりたかったけど、まぁいいや。
$ 58 = 3^2 + 7^2 $
Alphaちゃんによると58はIdoneal numberだとのこと。
58 is an idoneal number.
58 - Wolfram|Alpha
日本語でなんていうのか分からなかったけど英語版Wikipediaによるとこんな数らしいです。
In mathematics, Euler's idoneal numbers (also called suitable numbers or convenient numbers) are the positive integers D such that any integer expressible in only one way as x^2 ± Dy^2 (where x^2 is relatively prime to Dy^2) is a prime, prime power, or twice one of these.(relatively prime=互いに素)
うーむ、こういうことかな。
正整数Dがidoneal numberであるならば、整数x,yによって
\[n = x^2 \pm Dy^2 \]
と書いたとき(ただし$x^2$と$Dy^2$は互いに素)、値nを素数か素数のべき乗およびそれらの2倍にできる。
(定義が複雑でよく分からん。これで正しいのか?)
$ 3^2 + 58*1^2 = 67 $で素数ですね。他に適当にemacs lispで計算してみると($58=2*29$なのでxを2の倍数にすると互いに素にならないのでNG)、
(defun idoneal (d x y) (list (+ (* x x) (* d y y)) (- (* x x) (* d y y)))) (idoneal 58 3 2) (241 -223) ; 241 素数 (idoneal 58 5 1) (83 -33) ; 83 素数 (idoneal 58 5 2) (257 -207) ; 257 素数 (idoneal 58 7 1) (107 -9) ; 107 素数
あれ、なんかすごくないこれ? Wikipediaによるとこの系列には無限個の素数を含んでいるそうです。
算術級数定理と似てるけど等差数列にはならないから違いますね。
idoneal numberは意外にも有限みたいです。
カール・ガウスとオイラーによって今まで65個のidoneal numberが発見されていて、それで全部だと予想されていると。
The 65 idoneal numbers found by Carl Friedrich Gauss and Leonhard Euler and conjectured to be the only such numbers are 1, 2, 3, 4, 5, 6, 7, 8, 9, 10, 12, 13, 15, 16, 18, 21, 22, 24, 25, 28, 30, 33, 37, 40, 42, 45, 48, 57, 58, 60, 70, 72, 78, 85, 88, 93, 102, 105, 112, 120, 130, 133, 165, 168, 177, 190, 210, 232, 240, 253, 273, 280, 312, 330, 345, 357, 385, 408, 462, 520, 760, 840, 1320, 1365, and 1848 (sequence A000926 in OEIS). Weinberger proved in 1973 that at most one other idoneal number exists, and that if the generalized Riemann hypothesis holds, then the list is complete.
Idoneal number - Wikipedia, the free encyclopedia
なんかリーマン予想とも関係あるらしいけど、もう追い切れないので切り上げる!
素数腕立て伏せ一言コメント
とうとうACをやり遂げました(インド標準時とかイラン標準時とか知らんもーん)。
12月1日に比べると明らかに腕力が付きました。あといろんな自然数の性質に触れて楽しかった。
最後の最後にidoneal numberなんていうよく分からない数も出てきて、「俺たちの素数腕立て伏せはこれからだ!」と打ち切りエンドっぽく盛り上がりました(自分の中では)。
各記事のPVは二桁なんですが、2015年も素数腕立て伏せニストとして普及に努めていきまーす。(来年はQiitaを使おう)
あと2014年中に今までのまとめ一覧表をアップしまーす。
2014-12-30
素数腕立て伏せ Advent Calendar 30日目 #prime_num_pushups
素数腕立て伏せってなんじゃ?という方はまずこちらをどうぞ。
素数腕立て伏せについて : サルノオボエガキ
これまでのまとめ記事を書こうと思ったけどクソメンドイっすね、書くけど。
30日目
33回で負け(合成数)
あと10回は行けたはず。TV見ながらやるのは止めよう。19日目の38.7度の熱を出してた時と同じ記録なのはアカン。
33は9通りの方法で3つの素数の和として表せる最小の数だと。
素数の和といえば「4以上のすべての偶数は2個の素数の和で表せる」というゴールドバッハの予想が有名ですね。
もともとゴールドバッハさんが述べたのは「5より大きな任意の自然数は3つの素数の和で表せる」という命題だったそうです。3素数の和で表せたとして、そのパターン数を求める定理は無いのかな?
ほかにWikipediaにある数学的性質ではこれが面白かった。
素数腕立て伏せ一言メモ
明日で素数腕立て伏せACは終わりです。できれば53以上の素数で終わりたいなぁ(フラグ)。
素数腕立て伏せについて : サルノオボエガキ
これまでのまとめ記事を書こうと思ったけどクソメンドイっすね、書くけど。
30日目
33回で負け(合成数)
あと10回は行けたはず。TV見ながらやるのは止めよう。19日目の38.7度の熱を出してた時と同じ記録なのはアカン。
33 is the smallest number with 9 representations as a sum of 3 primes:
33 = 2+2+29 = 3+7+23 = 3+11+19 = 3+13+17 = 5+5+23 = 5+11+17 = 7+7+19 = 7+13+13 = 11+11+11
33 - Wolfram|Alpha
33は9通りの方法で3つの素数の和として表せる最小の数だと。
素数の和といえば「4以上のすべての偶数は2個の素数の和で表せる」というゴールドバッハの予想が有名ですね。
もともとゴールドバッハさんが述べたのは「5より大きな任意の自然数は3つの素数の和で表せる」という命題だったそうです。3素数の和で表せたとして、そのパターン数を求める定理は無いのかな?
ほかにWikipediaにある数学的性質ではこれが面白かった。
33 = 1! + 2! + 3! + 4!
33 - Wikipedia
素数腕立て伏せ一言メモ
明日で素数腕立て伏せACは終わりです。できれば53以上の素数で終わりたいなぁ(フラグ)。
2014-12-29
素数腕立て伏せ Advent Calendar 29日目 #prime_num_pushups
素数腕立て伏せってなんじゃ?という方はまずこちらをどうぞ。
素数腕立て伏せについて : サルノオボエガキ
コタツはあれか、催眠ビームでも出してんのけ?
29日目
43回で勝ち(素数)
53越えを目指してたのでイマイチ不満。うーむ、腕のポジションが安定して無かった気がするなー。
43は41と双子素数ですね。そういや29と31も双子素数だ。
素数腕立て伏せ一言メモ
お餅が美味しいのでつい食べ過ぎちゃったが、素数腕立て伏せのおかげで筋肉量が増えてるはずなのでたぶん大丈夫なはず。たぶん。
素数腕立て伏せについて : サルノオボエガキ
コタツはあれか、催眠ビームでも出してんのけ?
29日目
43回で勝ち(素数)
53越えを目指してたのでイマイチ不満。うーむ、腕のポジションが安定して無かった気がするなー。
43は41と双子素数ですね。そういや29と31も双子素数だ。
41 and 43 form a twin prime pair.
43 - Wolfram|Alpha
素数腕立て伏せ一言メモ
お餅が美味しいのでつい食べ過ぎちゃったが、素数腕立て伏せのおかげで筋肉量が増えてるはずなのでたぶん大丈夫なはず。たぶん。
2014-12-28
素数腕立て伏せ Advent Calendar 28日目 #prime_num_pushups
素数腕立て伏せってなんじゃ?という方はまずこちらをどうぞ。
素数腕立て伏せについて : サルノオボエガキ
寒い!
28日目
27回で負け(合成数)
素数腕立て伏せの途中で話しかけられると記録が伸びないということが分かりました。
やはり精神統一と脳内カウントが大事みたいっすねー。
素数腕立て伏せ一言メモ
今度はロッキーのテーマをiPodで聞きながら素数腕立て伏せします。
素数腕立て伏せについて : サルノオボエガキ
寒い!
28日目
27回で負け(合成数)
素数腕立て伏せの途中で話しかけられると記録が伸びないということが分かりました。
やはり精神統一と脳内カウントが大事みたいっすねー。
27 is the smallest number with 2 representations as a sum of 3 positive squares:
27 = 1^2+1^2+5^2 = 3^2+3^2+3^2
27 - Wolfram|Alpha
素数腕立て伏せ一言メモ
今度はロッキーのテーマをiPodで聞きながら素数腕立て伏せします。
素数腕立て伏せ Advent Calendar 27日目 #prime_num_pushups
素数腕立て伏せってなんじゃ?という方はまずこちらをどうぞ。
素数腕立て伏せについて : サルノオボエガキ
大掃除してたらこれを書くの忘れてしまった。腕立て自体はちゃんとやったよ!
27日目
50回で負け(合成数)
53を目指してたので残念。49でかなり限界にきてて+1回で力尽きた。
50は21日から2回めですね。2通りの方法で2つの平方数の和で表せる最小の数字。ただし0も平方数に含めると25が最小です($25 = 0^2 + 5^2 = 3^2 + 4^2$)。
素数腕立て伏せ一言メモ
大掃除すると素数腕立て伏せしたときに床がピカピカで気分いいですよ!
素数腕立て伏せについて : サルノオボエガキ
大掃除してたらこれを書くの忘れてしまった。腕立て自体はちゃんとやったよ!
27日目
50回で負け(合成数)
53を目指してたので残念。49でかなり限界にきてて+1回で力尽きた。
50は21日から2回めですね。2通りの方法で2つの平方数の和で表せる最小の数字。ただし0も平方数に含めると25が最小です($25 = 0^2 + 5^2 = 3^2 + 4^2$)。
素数腕立て伏せ一言メモ
大掃除すると素数腕立て伏せしたときに床がピカピカで気分いいですよ!
2014-12-27
素数腕立て伏せ Advent Calendar 26日目 #prime_num_pushups
素数腕立て伏せってなんじゃ?という方はまずこちらをどうぞ。
素数腕立て伏せについて : サルノオボエガキ
忘年会に出て年を忘れてたら筋トレの習慣も忘れてたわ〜(かなり大爆笑)
26日目
48回で負け(合成数)
またしても53まで行かなかった。スポーツ的な面もあるから今度は精神統一してからやろう。掛け声とかも。
$ 48 = 4^2 + 4^2 + 4^2$、ゾロ目でキレイ。
WolframさんとこのAlphaちゃんに訊いたところ正48角形は定規とコンパスで作図可能だとのことです。
フェルマー素数は $ p = 2^{2^m} + 1 $ と書ける素数のこと。
うーんと、$ 48 = 2^4 * 3 = 2^4 * (2^{2^0} + 1) $ か。たしかに条件は満たしてますね。
ところでWikipediaにあったモール-マスケローニの定理が気になるぞ(内容と語感がいい)。
素数腕立て伏せ一言メモ
素数腕立て伏せに必要不可欠となってきているWolframAlphaですが、Wolframおじさんの孫娘Alphaちゃんと考えると非常に癒やされることに気づきました。
「WolframAlpha 萌え擬人化」で検索しても出てこないから誰か描いちゃってもいいのよ。
ちなみにMathematicaは個人的には数学ガールのミルカさんのイメージ。
素数腕立て伏せについて : サルノオボエガキ
忘年会に出て年を忘れてたら筋トレの習慣も忘れてたわ〜(かなり大爆笑)
26日目
48回で負け(合成数)
またしても53まで行かなかった。スポーツ的な面もあるから今度は精神統一してからやろう。掛け声とかも。
$ 48 = 4^2 + 4^2 + 4^2$、ゾロ目でキレイ。
WolframさんとこのAlphaちゃんに訊いたところ正48角形は定規とコンパスで作図可能だとのことです。
A regular 48-gon is constructible with straightedge and compass.
48 - Wolfram|Alpha
ガウスはさらに1801年に出版した『整数論の研究』において、正 n 角形が作図可能であるための必要十分条件が、n が2の冪と相異なるフェルマー素数の積、すなわち
n = 2^mFaFb…Fc(Fa , Fb , … ,Fc は全て異なるフェルマー素数、m は非負整数)
の形であることを示した[6]。
定規とコンパスによる作図 - Wikipedia
フェルマー素数は $ p = 2^{2^m} + 1 $ と書ける素数のこと。
うーんと、$ 48 = 2^4 * 3 = 2^4 * (2^{2^0} + 1) $ か。たしかに条件は満たしてますね。
ところでWikipediaにあったモール-マスケローニの定理が気になるぞ(内容と語感がいい)。
素数腕立て伏せ一言メモ
素数腕立て伏せに必要不可欠となってきているWolframAlphaですが、Wolframおじさんの孫娘Alphaちゃんと考えると非常に癒やされることに気づきました。
「WolframAlpha 萌え擬人化」で検索しても出てこないから誰か描いちゃってもいいのよ。
ちなみにMathematicaは個人的には数学ガールのミルカさんのイメージ。
2014-12-26
素数腕立て伏せ Advent Calendar 25日目 #prime_num_pushups
素数腕立て伏せってなんじゃ?という方はまずこちらをどうぞ。
素数腕立て伏せについて : サルノオボエガキ
クリスマスというものに、最近の犀川は何も感じない。十二月二十五日だから、1、2、2、5の数字を全部足すとちょうど10になる、というくらいの印象しかない。
笑わない数学者
クリスマス=チキンとケーキが安く買える日になりつつある。
そういや$12^2 + 25 = 13^2$ですね(深い意味は無い)。
25日目
38回で負け(合成数)
別のことを考えながらやり始めたら、なんかタイミングがおかしくなった。
手のポジション、タイミング、スピードなどをいつもどおりにしないと調子が狂うなぁ。
$38 = 2^2 + 3^2 + 5^2$
素数腕立て伏せアナウンス
1日目に書きましたが、25って数字が気に食わないのでアドベントカレンダーだけど31日まで続けます。
PVの少なさもなんのその、カーズ様だって言ってます「頂点に立つものは 常にひとり!」。(このセリフ、使い勝手よくて好き)
2014-12-25
素数腕立て伏せ Advent Calendar 24日目 #prime_num_pushups
素数腕立て伏せってなんじゃ?という方はまずこちらをどうぞ。
素数腕立て伏せについて : サルノオボエガキ
さっき気づいたけど$ 1^2 + 2^2 + 2^2 + 4^2 = 25 = 5^2 $だ、すごくね?
イブ? なんですかそれ。
24日目
49回で負け(合成数)
30ぐらいまでは調子良かったんだけど、45からの踏ん張りが効かなかった。
$ 49 = 7^2 = 2^2 + 3^2 + 6^2 $
素数腕立て伏せ一言メモ
続けてるといろんな数の性質について敏感になるみたいです。
「あの数を平方和で表すとー」とか無意識に考えてしまう。
2014-12-24
素数腕立て伏せ Advent Calendar 23日目 #prime_num_pushups
素数腕立て伏せってなんじゃ?という方はまずこちらをどうぞ。
素数腕立て伏せについて : サルノオボエガキ
あまりにも穏やかな1日過ぎて忘れるとこだった。
23日目
46回で負け(合成数)
50は越えると思ったんだけど勢いが途切れてしまった。素数日数は勝ちたかったなー。
$ 46 = 1^2 + 3^2 + 6^2 $
素数腕立て伏せACミニ集計
1日から23日までの素数腕立て伏せでは、
勝ち9回
負け14回
で、勝率は3割9分です。
残りは8日間。安全勝ちを狙わず常に攻めの勝ちを目指す所存であーる。
素数腕立て伏せについて : サルノオボエガキ
あまりにも穏やかな1日過ぎて忘れるとこだった。
23日目
46回で負け(合成数)
50は越えると思ったんだけど勢いが途切れてしまった。素数日数は勝ちたかったなー。
$ 46 = 1^2 + 3^2 + 6^2 $
素数腕立て伏せACミニ集計
1日から23日までの素数腕立て伏せでは、
勝ち9回
負け14回
で、勝率は3割9分です。
残りは8日間。安全勝ちを狙わず常に攻めの勝ちを目指す所存であーる。
2014-12-23
素数腕立て伏せ Advent Calendar 22日目 #prime_num_pushups
素数腕立て伏せってなんじゃ?という方はまずこちらをどうぞ。
素数腕立て伏せについて : サルノオボエガキ
ねむい!
22日目
29回で勝ち(素数)
いつもよりゆっくり目に腕立て伏せをしてみたらこんな記録になってしまった。
普段は勢いに任せてやってたところもあったみたい。
ところで昨日の2通りの方法で2つの平方数の和で表せる数についてごりごり計算して考えてみました。

(本屋のブックカバーを広げてミウラ折りにしておくと計算用紙として便利。ほどほどに大きい)
結局よくわかんなーい、だったですが途中まで確認した事実をアウトプットしておきましょう。自分でも忘れそうだし。
$ x = a^2 + b^2 = c^2 + d^2$ とします。まずはそれぞれの大小関係を考えてみます。
$ a \le b かつ c \le d $としておいて、b,dを考えます。b=d はありえない(2通りじゃなくて1通りになるから)。なので b<d とできる(逆でもいいけど分かりやすい順にした)。
それでこんなふうに式変形してみると c<a ってこともわかる。
\[
\begin{eqnarray}
a^2 + b^2 = c^2 + d^2 \nonumber \\
a^2 - c^2 = d^2 - b^2 \nonumber
\end{eqnarray}
\]
b<d から右辺は正数、左辺も同様なので $a^2 - c^2 > 0 $ から c<a がわかるという寸法です。
これらの条件を組み合わせると次の大小関係がわかります(ねむい、tex調べながら書くのだるい)。
\[
\begin{equation}
c < a \le b < d
\end{equation}
\]
これで大小関係はひとまず分かった。つぎは、、、最初の式をもう少し変形してみようかな。
\[
\begin{eqnarray}
a^2 + b^2 & = & c^2 + d^2 \nonumber \\
a^2 - c^2 & = & d^2 - b^2 \nonumber \\
(a - c) ( a + c ) & = & (d-b)(d+b) \nonumber \\
\frac{a + c}{d - b} & = & \frac{ d + b} {a -c}
\end{eqnarray}
\]
(2)は、、、なんかこれからもう少し何か言えそうなんだけど。
あと平方数同士の差って連続する奇数の和と等しいから、異なる範囲の連続する奇数の和が等しくなる条件は何かって問題は同値だよなぁ、とか思ったけどなむい。今日はここまでだ。
あとオンライン整数列大辞典で50,65,85を検索したらいくつか登録されてましたね。これとかそのまま。
A118882 Numbers which are the sum of two squares in two or more different ways.
素数腕立て伏せ一言メモとかどうでもいいや
ねむい
素数腕立て伏せについて : サルノオボエガキ
ねむい!
22日目
29回で勝ち(素数)
いつもよりゆっくり目に腕立て伏せをしてみたらこんな記録になってしまった。
普段は勢いに任せてやってたところもあったみたい。
ところで昨日の2通りの方法で2つの平方数の和で表せる数についてごりごり計算して考えてみました。

(本屋のブックカバーを広げてミウラ折りにしておくと計算用紙として便利。ほどほどに大きい)
結局よくわかんなーい、だったですが途中まで確認した事実をアウトプットしておきましょう。自分でも忘れそうだし。
$ x = a^2 + b^2 = c^2 + d^2$ とします。まずはそれぞれの大小関係を考えてみます。
$ a \le b かつ c \le d $としておいて、b,dを考えます。b=d はありえない(2通りじゃなくて1通りになるから)。なので b<d とできる(逆でもいいけど分かりやすい順にした)。
それでこんなふうに式変形してみると c<a ってこともわかる。
\[
\begin{eqnarray}
a^2 + b^2 = c^2 + d^2 \nonumber \\
a^2 - c^2 = d^2 - b^2 \nonumber
\end{eqnarray}
\]
b<d から右辺は正数、左辺も同様なので $a^2 - c^2 > 0 $ から c<a がわかるという寸法です。
これらの条件を組み合わせると次の大小関係がわかります(ねむい、tex調べながら書くのだるい)。
\[
\begin{equation}
c < a \le b < d
\end{equation}
\]
これで大小関係はひとまず分かった。つぎは、、、最初の式をもう少し変形してみようかな。
\[
\begin{eqnarray}
a^2 + b^2 & = & c^2 + d^2 \nonumber \\
a^2 - c^2 & = & d^2 - b^2 \nonumber \\
(a - c) ( a + c ) & = & (d-b)(d+b) \nonumber \\
\frac{a + c}{d - b} & = & \frac{ d + b} {a -c}
\end{eqnarray}
\]
(2)は、、、なんかこれからもう少し何か言えそうなんだけど。
あと平方数同士の差って連続する奇数の和と等しいから、異なる範囲の連続する奇数の和が等しくなる条件は何かって問題は同値だよなぁ、とか思ったけどなむい。今日はここまでだ。
あとオンライン整数列大辞典で50,65,85を検索したらいくつか登録されてましたね。これとかそのまま。
A118882 Numbers which are the sum of two squares in two or more different ways.
素数腕立て伏せ一言メモとかどうでもいいや
ねむい
2014-12-22
素数腕立て伏せ Advent Calendar 21日目 #prime_num_pushups
素数腕立て伏せってなんじゃ?という方はまずこちらをどうぞ。
素数腕立て伏せについて : サルノオボエガキ
風邪を引いても熱が出ても構わず素数腕立て伏せやってて結局治ったわけだから、素数のお陰で全快したと言えまいか。
素数腕立て伏せ健康法、イケまいか。
21日目
50回で負け(合成数)
体力も戻ってきたみたいです。59を目指してたけど53にも届かなかったよ。
ところで50は2通りの方法で2つの平方数の和に表せす最小の数字らしいですね。(smallestttってバグってるのかななな)
ではこの条件に叶う2番めに小さい数字ってなんだろう?
まず$ x = a^2 + b^2 = c^2 + d^2 $として、a,b,c,dはそれぞれ異なる数でないといけない。(←追記:コレ違う)
では50のときは$ a = 1, b = 7 $ だったから$ a = 2 $ で幾つか計算してみよう。
2つの数の組合せを計算しないといけないけど、奇偶を考えればチェックする数が減らせますね。
\[
\begin{eqnarray}
2^2 + 7^2 & = & 53 \nonumber \\
3^2 + 6^2 & = & 45 (ダメ) \nonumber \\
5^2 + 6^2 & = & 61 (ダメ) \nonumber \\
4^2 + 5^2 & = & 41 (ダメ) \nonumber
\end{eqnarray}
\]
うーん、だめだった。では次は和の大きさも考えて候補を減らそう。和の大きい順に抑えていって目標の数より下回ったら終わりということ。
\[
\begin{eqnarray}
2^2 + 8^2 & = & 68 \nonumber \\
5^2 + 7^2 & = & 74 (最大の組合せはダメ) \nonumber \\
3^2 + 7^2 & = & 58 (残ってる組合せで最大の組合せもダメ) \nonumber
\end{eqnarray}
\]
これもダメすね。はい次!
\[
\begin{eqnarray}
2^2 + 9^2 & = & 85 \nonumber \\
7^2 + 8^2 & = & 113 (最大の組合せはダメ) \nonumber \\
6^2 + 7^2 & = & 85 (残ってる中で最大の組合せはビンゴ!)\nonumber
\end{eqnarray}
\]
おぉ、85が2番めに小さな(省略)な数らしいぞ!
たまには地道に計算してみるのもいいものだね〜。
念のため、プログラムで検算してみよう(もちろん使うのはClojure)。
素数腕立て伏せについて : サルノオボエガキ
風邪を引いても熱が出ても構わず素数腕立て伏せやってて結局治ったわけだから、素数のお陰で全快したと言えまいか。
素数腕立て伏せ健康法、イケまいか。
21日目
50回で負け(合成数)
体力も戻ってきたみたいです。59を目指してたけど53にも届かなかったよ。
ところで50は2通りの方法で2つの平方数の和に表せす最小の数字らしいですね。(smallestttってバグってるのかななな)
50 is the smallesttt number with 2 representations as a sum of 2 squares:
50 = 1^2+7^2 = 5^2+5^2
50 - Wolfram|Alpha
ではこの条件に叶う2番めに小さい数字ってなんだろう?
まず$ x = a^2 + b^2 = c^2 + d^2 $として、a,b,c,dはそれぞれ異なる数でないといけない。(←追記:コレ違う)
では50のときは$ a = 1, b = 7 $ だったから$ a = 2 $ で幾つか計算してみよう。
2つの数の組合せを計算しないといけないけど、奇偶を考えればチェックする数が減らせますね。
\[
\begin{eqnarray}
2^2 + 7^2 & = & 53 \nonumber \\
3^2 + 6^2 & = & 45 (ダメ) \nonumber \\
5^2 + 6^2 & = & 61 (ダメ) \nonumber \\
4^2 + 5^2 & = & 41 (ダメ) \nonumber
\end{eqnarray}
\]
うーん、だめだった。では次は和の大きさも考えて候補を減らそう。和の大きい順に抑えていって目標の数より下回ったら終わりということ。
\[
\begin{eqnarray}
2^2 + 8^2 & = & 68 \nonumber \\
5^2 + 7^2 & = & 74 (最大の組合せはダメ) \nonumber \\
3^2 + 7^2 & = & 58 (残ってる組合せで最大の組合せもダメ) \nonumber
\end{eqnarray}
\]
これもダメすね。はい次!
\[
\begin{eqnarray}
2^2 + 9^2 & = & 85 \nonumber \\
7^2 + 8^2 & = & 113 (最大の組合せはダメ) \nonumber \\
6^2 + 7^2 & = & 85 (残ってる中で最大の組合せはビンゴ!)\nonumber
\end{eqnarray}
\]
おぉ、85が2番めに小さな(省略)な数らしいぞ!
たまには地道に計算してみるのもいいものだね〜。
念のため、プログラムで検算してみよう(もちろん使うのはClojure)。
user> (def squares (map (fn [x] (* x x)) (range 1 10))) #'user/squares user> (filter (fn [[k v]] (>= (count v) 4)) (apply merge-with concat (for [x squares, y squares :while (<= y x)] {(+ x y) [x y]}))) ([65 (49 16 64 1)] [50 (25 25 49 1)] [85 (49 36 81 4)])あれれ、85は正しいけど3番目だったみたいだ。(1,7)から(2,7)じゃなくて、(1,6)を調べれば65に行き当たってたのになー。 ということで、2通りの方法で2つの平方数の和で表せる2番めに小さい自然数は65でした(ついでに3番めは85)。
2014-12-20
素数腕立て伏せ Advent Calendar 20日目 #prime_num_pushups
素数腕立て伏せってなんじゃ?という方はまずこちらをどうぞ。
素数腕立て伏せについて : サルノオボエガキ
平熱に戻ったし素数腕立て伏せすんぞオラ!
20日目
37回で勝ち(素数)
病み上がりだからセーブしただけだし。別にパワーダウンしてないし。
37ってベルヌーイ数に関係があるみたいですね。
そういえば昔にべき乗和の公式を調べてたときにベルヌーイ数を初めてみたんだったなぁ(その時は意味不明でしたが)。
関孝和も同時期に同じ結果を出していたらしい。関さんパネェ。
素数腕立て伏せ一言メモ
素数腕立て伏せは回数が増えるほど勝ちが困難になるという特徴があるが、裏を返せば回数が少ないほど勝ちが多くなる。
体力が落ちてツライときは無理せず、少ない回数で勝ちを取って気力を得よう。
ハングリー精神は健康になるまで取っておけ!
素数腕立て伏せとは関係ないけど、マンガ版『天地明察』七巻に出てきた関孝和は意外なキャラで面白かったです。和算がパズルとほぼ同じ時代に代数を考えていた関さんの異才は、同時代の主人公からすればまさに龍のごとしでしょう。(追記:勘違い、七巻じゃまだ関さんは出てこなかった、たぶん八巻で出る)
素数腕立て伏せについて : サルノオボエガキ
平熱に戻ったし素数腕立て伏せすんぞオラ!
20日目
37回で勝ち(素数)
病み上がりだからセーブしただけだし。別にパワーダウンしてないし。
37ってベルヌーイ数に関係があるみたいですね。
37 is an irregular prime, since it divides the numerator of the Bernoulli number B_32 = -7709321041217/510.
37 - Wolfram|Alpha
そういえば昔にべき乗和の公式を調べてたときにベルヌーイ数を初めてみたんだったなぁ(その時は意味不明でしたが)。
ベルヌーイ数は、もともと、連続する整数のべき乗和を定式化する際に、展開係数として導入された。
(中略)
一方、日本ではベルヌーイとほぼ同時期に関孝和がべき乗和を定式化し、ベルヌーイ数を発見していた[6]。 そのため、ベルヌーイ数を関・ベルヌーイ数と書いている文献[7]もある。
ベルヌーイ数 - Wikipedia
関孝和も同時期に同じ結果を出していたらしい。関さんパネェ。
素数腕立て伏せ一言メモ
素数腕立て伏せは回数が増えるほど勝ちが困難になるという特徴があるが、裏を返せば回数が少ないほど勝ちが多くなる。
体力が落ちてツライときは無理せず、少ない回数で勝ちを取って気力を得よう。
ハングリー精神は健康になるまで取っておけ!
素数腕立て伏せとは関係ないけど、マンガ版『天地明察』七巻に出てきた関孝和は意外なキャラで面白かったです。和算がパズルとほぼ同じ時代に代数を考えていた関さんの異才は、同時代の主人公からすればまさに龍のごとしでしょう。(追記:勘違い、七巻じゃまだ関さんは出てこなかった、たぶん八巻で出る)
素数腕立て伏せ Advent Calendar 19日目 #prime_num_pushups
素数腕立て伏せってなんじゃ?という方はまずこちらをどうぞ。
素数腕立て伏せについて : サルノオボエガキ
風邪で高熱(インフルの可能性もあり)ってことが確定したけど素数腕立て伏せはやるよ!
19日目
33回で負け(合成数)
まぁかるく身体を動かして汗をかくのはいいと思うんだよね。
33 repeats a single digit in base 10.
33 - Wolfram|Alpha
数学と関係ないけど、英語でゾロ目はこういうふうに表現するんですね。
素数腕立て伏せとは関係ない風邪一言メモ
ポカリ必須(アクエリも可)、粉末のだと場所取らず常備できるから便利。
冷えピタシートはあると気持ちいい。
枕元にゲロっても大丈夫なようにゴミ箱や風呂桶を用意する、あとトイレットペーパーも。
暖かい毛布は身体の下に敷く。
おかゆのパックは常備しておくべし、だけど無理に食わなくてもいい。
2014-12-18
素数腕立て伏せ Advent Calendar 18日目 #prime_num_pushups
素数腕立て伏せってなんじゃ?という方はまずこちらをどうぞ。
素数腕立て伏せについて : サルノオボエガキ
ずっと筋肉痛だと思ってたけど、さらに寒気が加わるとなるとこれは。。。
アウトドア素数腕立て伏せはやってません。
18日目
31回で勝ち(素数)
筋肉痛のため記録ダウン。ちょっと肩こり(飽くまで肩こり)がヒドイから短めでよろしく。
素数腕立て伏せについて : サルノオボエガキ
ずっと筋肉痛だと思ってたけど、さらに寒気が加わるとなるとこれは。。。
アウトドア素数腕立て伏せはやってません。
18日目
31回で勝ち(素数)
筋肉痛のため記録ダウン。ちょっと肩こり(飽くまで肩こり)がヒドイから短めでよろしく。
2014-12-17
素数腕立て伏せ Advent Calendar 17日目 #prime_num_pushups
素数腕立て伏せってなんじゃ?という方はまずこちらをどうぞ。
素数腕立て伏せについて : サルノオボエガキ
とりあえず公園まで行ったもののアウトドア素数腕立て伏せをやる勇気が出ず、Ingressやって帰ってきました。
明日も行ってみよう、Ingressやりながら。
17日目
52回で負け(合成数)
51回で素数だと思ったけど 3*17 でしたね、勘違いして力尽きてしまった。。。
WolframAlpha先生によると52は5番目のベル数だとのこと。いろんな数があるのね。
52 is the 5th Bell number (B_5).
52 - Wolfram|Alpha
ベル数(ベルすう、英: Bell number)は、自然数のうちn個のものを分割(もしくはグループ化)する方法の総数にあたる数である。n番目のベル数を Bn とし、B0 = B1 = 1 と定義する。Eric Temple Bell にちなんで名付けられた。例えば 5 は3個のものをグループ化する方法の総数(後述)であるので 5 は3番目のベル数 B3 である。
(中略)
また素数を p とおくと次式が成り立つ。
\[B_{p+n}\equiv B_n+B_{n+1}\ (\operatorname{mod}\ p)\]
ベル数 - Wikipedia
あと52といえばトランプの枚数ですね。ベル数とトランプを絡めてなんかゲームを作れないかな(テキトー発言)。
素数腕立て伏せ一言メモ
ついに50台まで来たわけですが、ここから素数を区切りに選んだ真の効果が発動します。かなり辛くなってるのに次の素数までの間が長い!
これこそ腕力がついても常に困難な目標を持てるという素数腕立て伏せの真骨頂!
素数腕立て伏せ Advent Calendar 16日目 #prime_num_pushups
素数腕立て伏せってなんじゃ?という方はまずこちらをどうぞ。
素数腕立て伏せについて : サルノオボエガキ
このACではインド標準時を採用すると言ったな? あれは嘘だ。イラン標準時(UTC+3:30)でしたよ最初から。
16日目
43回で勝ち(素数)
43って一見素数っぽくないから負けだと勘違いしてしまった。グロタンディーク素数みたーい。
素数腕立て伏せAC一言メモ
0時を過ぎたとかそんな小さなことはどうでもいい、そもそも地球上の時間であるといつ言ったかね。こちらとしては冥王星時間でも一向に構わないですよ?
そんなことより素数腕立て伏せだ!
素数腕立て伏せについて : サルノオボエガキ
このACではインド標準時を採用すると言ったな? あれは嘘だ。イラン標準時(UTC+3:30)でしたよ最初から。
16日目
43回で勝ち(素数)
43って一見素数っぽくないから負けだと勘違いしてしまった。グロタンディーク素数みたーい。
素数腕立て伏せAC一言メモ
0時を過ぎたとかそんな小さなことはどうでもいい、そもそも地球上の時間であるといつ言ったかね。こちらとしては冥王星時間でも一向に構わないですよ?
そんなことより素数腕立て伏せだ!
登録:
投稿 (Atom)