綾小路龍之介の素人思考

等差数列の計算

C:\>perl -e "$a=1; $d=1; for (1..100) { $S+=$a+($_-1)*$d; } print $S"
5050
C:\>

これは少し便利かも知れないぞ。でも少し便利なだけ。等差数列には和の公式があるから。それを使ったほうが断然早い。特に1から10000000000間での計算とかやらせたとき。それにこの数が大きすぎると「数が大きすぎるぞコラ」メッセージが出る。例えばこんな感じに。

C:\>perl -e "$a=1; $d=1; for (1..100000000000000000) { $S+=$a+($_-1)*$d; } print $S"
Range iterator outside integer range at -e line 1.
C:\>

それよりもlオプションを使って、各項の値anとそのときの和Snを表示したほうがうれしいかもしれないな。例えばこんな風に。

C:\>perl -le "$a=1; $d=1; $an=0; for (1..10) { $an=$a+($_-1)*$d; $S+=$an; print"$an"."_"."$S";} print $S"
1_1
2_3
3_6
4_10
5_15
6_21
7_28
8_36
9_45
10_55
55
C:\>

それにしてもprint文の中でスペースはどう考えればいいのだろう。それはこうすればいいのだ。

C:\>perl -le "$a=1; $d=1; $an=0; for (1..10) { $an=$a+($_-1)*$d; $S+=$an; print "$an".' '."$S";} print $S"
1 1
2 3
3 6
4 10
5 15
6 21
7 28
8 36
9 45
10 55
55
C:\>

ソーシャルブックマーク

  1. はてなブックマーク
  2. Google Bookmarks
  3. del.icio.us

ChangeLog

  1. Posted: 2007-11-09T15:51:36+09:00
  2. Modified: 2007-11-09T04:41:04+09:00
  3. Generated: 2017-02-04T23:09:17+09:00