(数学セミナーの記事だったと思いますが)
小学生の頃、九九の表を眺めていて (x+1)(x-1) = x^2-1 を見つ
けたという方がいらっしゃいました。
なるほど、因数分解を習ったときはピンと来なかったけど、これっ
て速算に応用できるんですよね。キリのいい数から +1, -1 した数
の積は、x^2-1で簡単に計算できちゃいます。
71 * 69 = 4899 ( = 70^2 - 1)
92 * 88 = 8096 ( = 90^2 - 4)
なんていう計算はパパッと答えが出ます。
ほかにも、こんな速算テクニックがあるよ、とかいうのがあったら、
ぜひ教えてください。
-- 
Tanaka-Qtaro-Yasuhiro mailto:ta...@ca2.so-net.ne.jp
> 田中久太郎です。
> ほかにも、こんな速算テクニックがあるよ、とかいうのがあったら、
> ぜひ教えてください。
中学の時に教科書に書いてあったと思うが…
a, b, c を 1~9 の整数として、 b + c = 10 のとき、
  (10a + b)(10a + c)
     = 100a^2 + 10a(b + c) + bc
     = 100a(a + 1) + bc
つまり、2桁の数字のかけ算で、上の桁が同じで、下の桁の和が 10 のとき、
上の桁の数字とそれに1を加えた数との積を書き、それに並べて下の桁の2数
の積を書けば答えが出てきます。例えば、
83 * 87 = 72 21
(消費税 5%分の計算は、2で割って1桁ずらした方が速いだろに、ついつい
 5を掛けてしまうんだよなぁ ;-)
---------------------------------------------------------------------
                                           tesi...@mtf.biglobe.ne.jp
tesi...@mtf.biglobe.ne.jpさんの<c178eq$gdj$1...@bgsv5648.tk.mesh.ad.jp>から
> つまり、2桁の数字のかけ算で、上の桁が同じで、下の桁の和が 10 のとき、
> 上の桁の数字とそれに1を加えた数との積を書き、それに並べて下の桁の2数
> の積を書けば答えが出てきます。例えば、
> 
> 83 * 87 = 72 21
なるほど、これは知りませんでした。ご紹介ありがとうございます。
(僕が使った教科書には載ってなかったと思う…)
> (消費税 5%分の計算は、2で割って1桁ずらした方が速いだろに、ついつい
>  5を掛けてしまうんだよなぁ ;-)
ああ、わかります。
まあ今年の4月以降は使わない計算になりそうですが。
-- 
Tanaka-Qtaro-Yasuhiro mailto:ta...@ca2.so-net.ne.jp
*-*-*-* NGMP改訂CFV実施中 see fj.news.policy *-*-*-*
tesi...@mtf.biglobe.ne.jpさんの<c178eq$gdj$1...@bgsv5648.tk.mesh.ad.jp>から
>つまり、2桁の数字のかけ算で、上の桁が同じで、下の桁の和が 10 のとき、
>上の桁の数字とそれに1を加えた数との積を書き、それに並べて下の桁の2数
>の積を書けば答えが出てきます。
上記の応用(?)を思いつきました。
2桁の数字のかけ算で、下の桁が同じで、上の桁の和が10のときも簡単な計算に
なりますね。
a, b, c を 1~9 の整数として、 a + b = 10 のとき、
(10a + c)(10b + c)
= 100ab + 10(a + b)c + c^2
= 100(ab + c) + c^2
つまり上の桁の積に下の桁を加えて、それに並べて下の桁の二乗を書けば答えに
なります。
48 * 68 = 32 64
うーん、簡単。
#この数字に出会ったときに、ちゃんとこの方法を思い出せるといいんだけど。
-- 
Tanaka-Qtaro-Yasuhiro mailto:ta...@ca2.so-net.ne.jp
"Tanaka-Qtaro-Yasuhiro" <ta...@ca2.so-net.ne.jp> wrote in message news:c1bt6d$g5i$1...@news-wst.ocn.ad.jp...
GONさんの<c1c20s$qrd$1...@news511.nifty.com>から
>Math Magic ? w
Math Magicって深夜の通販番組とかで紹介されていたやつですか?
速算テクニック集みたいなものなんでしょうか?
-- 
Tanaka-Qtaro-Yasuhiro mailto:ta...@ca2.so-net.ne.jp
二桁の掛け算で、一方の一の位が5で、他方が偶数の時、
25 x 38 = (25x2) x (38/2) = 50 x 19 で一桁掛ける二桁の計算の10倍。
特に偶数のほうが10台だと、
15 x 18 = 30 x 9 = 270 と一桁掛ける一桁になるのでもっと簡単。
使えるケースは少ないけど、そのパターンの時に思い出せないという
ことは無いと思います。
-- 
tksotn
> 田中久太郎です。
> 71 * 69 = 4899 ( = 70^2 - 1)
> 92 * 88 = 8096 ( = 90^2 - 4)
> 
> なんていう計算はパパッと答えが出ます。
> 
> ほかにも、こんな速算テクニックがあるよ、とかいうのがあったら、
> ぜひ教えてください。
2を掛ける乗算ならば掛け算命令でなく左シフト命令
2で割る除算ならば割り算命令でなく右シフト命令
の方が演算実行あたりのクロックサイクルが稼げる
という話はOKなんでしょうか?
-- 
mailto:shi...@dd.iij4u.or.jp
Nobuhiro Shibuya at Office
Tokyo Japan
Nobuhiro Shibuya at Officeさんの<403A9FEE...@dd.iij4u.or.jp>から
>2を掛ける乗算ならば掛け算命令でなく左シフト命令
>2で割る除算ならば割り算命令でなく右シフト命令
>の方が演算実行あたりのクロックサイクルが稼げる
>という話はOKなんでしょうか?
2進数の速算テクニックとしてOKなんではないでしょうか。
#でもニュースグループが fj.comp.な感じが。
-- 
Tanaka-Qtaro-Yasuhiro mailto:ta...@ca2.so-net.ne.jp
In article <c1eb5q$592$1...@news-wst.ocn.ad.jp>, Tanaka-Qtaro-Yasuhiro wrote:
>田中久太郎です。
>
>Nobuhiro Shibuya at Officeさんの<403A9FEE...@dd.iij4u.or.jp>から
>>2を掛ける乗算ならば掛け算命令でなく左シフト命令
>>2で割る除算ならば割り算命令でなく右シフト命令
>>の方が演算実行あたりのクロックサイクルが稼げる
>>という話はOKなんでしょうか?
>
>2進数の速算テクニックとしてOKなんではないでしょうか。
>
>#でもニュースグループが fj.comp.な感じが。
一般化した
 n進法でn倍するのは一桁左にずらす
     1/n倍するのは一桁右にずらす
ならばここでいいような.
#普段使ってますよね?
-- 
Hideki Kato <mailto:ka...@pop12.odn.ne.jp>
----== Posted via Newsfeed.Com - Unlimited-Uncensored-Secure Usenet News==----
http://www.newsfeed.com The #1 Newsgroup Service in the World! >100,000 Newsgroups
---= 19 East/West-Coast Specialized Servers - Total Privacy via Encryption =---
> 一般化した
>  n進法でn倍するのは一桁左にずらす
>      1/n倍するのは一桁右にずらす
> ならばここでいいような.
> #普段使ってますよね?
# 再び fj.comp ネタっぽいので Newsgroups: もそんな感じで.
IOCCC (International Obfuscated C Code Contest) の 1992 年の "Most
Useful Algorithm" 賞に輝いた albert.c がちょっと「おおっ」と思わせる
作品でした. 
| $ time albert 1234567890123456789
| 3
| 3
| 101
| 3541
| 3607
| 3803
| At most one remains
| 
| real	0m0.031s
| user	0m0.015s
| sys	0m0.014s
つまり「1234567890123456789 の因数は 3, 3, 101, 3541, 3607, 3803 と後
一つです」と言っているわけですね (「後一つ」は 27961). 
この巨大数の因数分解に多倍長演算ライブラリの類は一切使われていません 
(確かそういうのはコンテストの要項から外れたはず). 当然剰余命令も一切あ
りません. そこそこ早くて, しかも (そういうコンテストですから) ソースも
わざと見にくくしているにも関わらず, 150 行程度しかありません.
なんて凄いプログラムなんだ! 凄いでしょ? 凄いでしょ?
というわけで, 以下ネタバレ :-)
↓
↓
↓
↓
↓
↓
↓
↓
↓
↓
↓
↓
↓
↓
↓
↓
↓
↓
↓
↓
↓
↓
↓
↓
↓
↓
↓
↓
↓
↓
↓
↓
# なんか今見たらデバッグ版と称して見易いバージョンが同梱されてる…. 当
# 時必死になって解読したのになぁ. 
↓
↓
↓
↓
↓
↓
↓
↓
↓
↓
↓
↓
↓
↓
↓
↓
↓
↓
↓
↓
↓
↓
↓
↓
↓
↓
↓
↓
↓
↓
↓
↓
以下の説明では一桁の因数 (2, 3, 5, 7) は見つけられないはずですが, 上の
例で何故 3 が出力されているのかの説明は勘弁してください (もうあの頃の
情熱はないので). 実際見易いバージョンでは (数値の取り込み方法の制限から)
3 は出てきませんが, アルゴリズム自体は一桁の基数にも対応出来るはずです.
実際のプログラムとはちょっと違いますが, 要はこんな感じ.
  まずは与えられた文字列を一桁毎に配列に入れていく. この時に文字の
  '0'~'9' を数の 0~9 に変換するので, 配列の各要素は十進表現の一桁に
  なる.
「基数」を 10 とする.
…で始まるわけですが, 折角疑似コードなので一桁にも対応させましょう.
  与えられた数の二進表現の各桁を一要素として配列にする. つまり, 配列の
  一要素=一桁=一ビット.
「基数」を 2 とする.
while (桁が二桁以上ある限り) {
    while (最下位桁が 0 である間) {
      「基数」を因数として表示. 
      最下位桁を破棄し, その上の桁を新たな最下位桁とする. 
    }
  
    配列全体は「基数」進法なので, これを「基数+1」進法に変換する. [*]
  
    「基数」に 1 加える. 
  }
  
  “後一つあるよ”と表示して終り. 
こんだけです :-)
キモは [*] の部分で, 通常の基数変換と異なり基数が 1 だけ違うことを利用
したアルゴリズムになっています (とはいっても効率は…). 
; 「基数」表現から「基数+1」表現への変換
  for (i;; 最上位桁の次から最下位桁に向けて) {
    for (j;; i 桁から最上位桁に向けて) {
      j 桁の数から一つ上の桁の数を減じる;
      if (j 桁の数が負なら) {
	j 桁に「基数+1」を加える; 
	j 桁の一つ上の桁の数から 1 減じる;
      }
    }
  }
以上, 表現は上の説明に準じています.
つまり, この方法では配列の一要素の最大値を上限とした因数への分解が可能
なわけです. 確かこの辺りの絡みで最後の要素の内容を表示してないんじゃな
かったかなー.
あんまり useful でもないと思ったのは私だけでしょうか :-p
doh...@hf.rim.or.jp (Kazuo Fox DOHZONO) writes:
> In article <403ac18d.6925%ka...@pop12.odn.ne.jp>
> 	Hideki Kato <ka...@pop12.odn.ne.jp> writes:
> 
> > 一般化した
> >  n進法でn倍するのは一桁左にずらす
> >      1/n倍するのは一桁右にずらす
> > ならばここでいいような.
> > #普段使ってますよね?
> # 再び fj.comp ネタっぽいので Newsgroups: もそんな感じで.
小数点以下を切捨てる除算で、負数の場合も考える時は、切捨てる方向
によってはNGです。Cで、i が int 型の時、i/4 と i>>2 は、多く
の処理系で異なる結果になります。
元の話題に戻って、、、
(1) 2桁の掛け算で、一の桁が5で、十の桁が 1違いの場合、
(10*a + 5) * (10*(a+1) + 5) = 100*a(a+2) + 75
#↑は、たまに使います
(2) n 進法で n-1 で割った剰余は、各桁の数字を足して n-1 で割った
    剰余に等しい → 1桁になるまで各桁の数字を足す
--
片山@PFU
In Message-ID: <c178eq$gdj$1...@bgsv5648.tk.mesh.ad.jp> って言うか、
http://groups.google.co.jp/group/fj.sci.math/browse_thread/thread/b5dc414219ea2f9e?hl=ja#
>Tanaka-Qtaro-Yasuhiro <ta...@ca2.so-net.ne.jp> writes:
>> 田中久太郎です。
>> ほかにも、こんな速算テクニックがあるよ、とかいうのがあったら、
>> ぜひ教えてください。
>
>中学の時に教科書に書いてあったと思うが…
>a, b, c を 1�"79 の整数として、 b + c = 10 のとき、
>
>  (10a + b)(10a + c)
>     = 100a^2 + 10a(b + c) + bc
>     = 100a(a + 1) + bc
>
>つまり、2桁の数字のかけ算で、上の桁が同じで、下の桁の和が 10 のとき、
>上の桁の数字とそれに1を加えた数との積を書き、それに並べて下の桁の2数
>の積を書けば答えが出てきます。例えば、
>
>83 * 87 = 72 21
去年か一昨年あたりに、「インド式」とか何とか言って本が出たり、
「ためしてガッテン」で取り上げられたりと、はやってましたね。
(わたしゃ、ロシア式かと思ってました。全然根拠ない :-)