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

類題

調和級数

Eq1.png

のn=100までを計算するプログラムを書け.

ヒント
例題の解法を参照しながら初めから書くべし(試験対策).初期化を実数ですることを忘れずに.

演習

入力が素数かどうかを判定するプログラムを書け.

ヒント1
素数とは,自分自身の数n と1 以外の数で割りきれないかどうか.
ヒント2
番兵(warden)を置いておいて,2からn − 1 までの数でn を次々と割っていき,一度でも割り切れれば番兵にマークをつける.ループが終わった後に番兵のマークを見て素数(prime number) かどうかを判定する.
ヒント3(高速化)
割り切れた時点でループからbreakする.さらに,ループの上限をできるだけ小さくする.
Last modified:2016/07/19 12:42:17
Keyword(s):
References:[LinuxEx] [MultiScale14] [RubyPrimary]