Prof. Shigeto R. Nishitani's website - IsPrime Diff

  • Added parts are displayed like this.
  • Deleted parts are displayed like this.

!!!例題
階乗(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)を取る)を使って階乗の桁数を出力するコードに書き換えよ.

!!!類題
調和級数

{{attach_view(Eq1.png)}}

のn=100までを計算するプログラムを書け.
:ヒント:例題の解法を参照しながら初めから書くべし(試験対策).初期化を実数ですることを忘れずに.

!!!演習
入力が素数かどうかを判定するプログラムを書け.
:ヒント1:素数とは,自分自身の数n と1 以外の数で割りきれないかどうか.
:ヒント2:番兵(warden)を置いておいて,2からn − 1 までの数でn を次々と割っていき,一度でも割り切れれば番兵にマークをつける.ループが終わった後に番兵のマークを見て素数(prime number) かどうかを判定する.
:ヒント3(高速化):割り切れた時点でループからbreakする.さらに,ループの上限をできるだけ小さくする.