IsPrime
例題
階乗(n!)を計算するrubyコードをつくれ.
解法
まず動いているコードをfactor.rbと名付けかえる.
[BobsNewPBG4-6:~/Ruby/isprime] bob% cp hello.rb factor.rb [BobsNewPBG4-6:~/Ruby/isprime] bob% cat factor.rb print "Hello world!\n" [BobsNewPBG4-6:~/Ruby/isprime] bob% ruby factor.rb Hello world!
次に入力を受け取って,そのまま出力するように変更する.
[BobsNewPBG4-6:~/Ruby/isprime] bob% emacs factor.rb File Edit Options Buffers Tools Help print "Hello world!\n"
print "Hello world!\n" puts gets.chomp
[BobsNewPBG4-6:~/Ruby/isprime] bob% !r ruby factor.rb Hello world! 4 4
それらしく書き換える.
[BobsNewPBG4-6:~/Ruby/isprime] bob% cat factor.rb print "Input number:" n=gets.chomp puts n [BobsNewPBG4-6:~/Ruby/isprime] bob% ruby factor.rb 4
次にこのinputされた回数ループを回す.いくつかの回しかたがあるが,whileで此処は書いておく.
[BobsNewPBG4-6:~/Ruby/isprime] bob% cat factor.rb print "Input number:" n = gets.chomp.to_i puts n i=1 while (i<=n) do print(i,"\n") i+=1 end [BobsNewPBG4-6:~/Ruby/isprime] bob% ruby factor.rb Input number:5 5 1 2 3 4 5
to_iで整数に変換しておく.
階乗計算になるようにfを用意して,それに f = f*i として次々に掛けていく.
[BobsNewPBG4-6:~/Ruby/isprime] bob% cat factor.rb print "Input number:" n = gets.chomp.to_i puts n i=1 f=1 while (i<=n) do f=f*i print(i,"!=",f,"\n") i+=1 end [BobsNewPBG4-6:~/Ruby/isprime] bob% ruby factor.rb Input number:5 5 1!=1 2!=2 3!=6 4!=24 5!=120
派生課題
f.to_s.length
(string(文字列)に変換して長さ(length)を取る)を使って階乗の桁数を出力するコードに書き換えよ.
類題
調和級数
のn=100までを計算するプログラムを書け.
- ヒント
- 例題の解法を参照しながら初めから書くべし(試験対策).初期化を実数ですることを忘れずに.
演習
入力が素数かどうかを判定するプログラムを書け.
- ヒント1
- 素数とは,自分自身の数n と1 以外の数で割りきれないかどうか.
- ヒント2
- 番兵(warden)を置いておいて,2からn − 1 までの数でn を次々と割っていき,一度でも割り切れれば番兵にマークをつける.ループが終わった後に番兵のマークを見て素数(prime number) かどうかを判定する.
- ヒント3(高速化)
- 割り切れた時点でループからbreakする.さらに,ループの上限をできるだけ小さくする.
Keyword(s):
References:[LinuxEx] [MultiScale14] [RubyPrimary]