2016-05-29 4 views
0

評価される整数が素数であるかどうかに基づいて真または偽を返すメソッドを作成しようとしています。以下のコードは、私がWikipediaの記事、前のstackoverflowの答えなどを読むことに基づいて一緒に敷き詰めたものです。現在、プログラムは素数に対してtrueを返しますが、falseを返しません。私は組み込み関数を使用せずにこれをやりたい私はこれをどのように修正すべきですか?Rubyで数値が素数であるかどうかを調べる

def prime?(integer) 
(2..integer - 1).each do |x| 
    if (integer % x) == 0 
    return false 
    else 
    return true 
    end 
end 
end 
+0

注: 'each'、' -'、 '%'、 '=='は組み込み関数です。 :P – Amadan

+0

@amadan - 賢い人ではない。あなたは@TiantianShiが 'Prime'のようなライブラリを参照していることを知っています。 – Pavling

答えて

0

ロジックに問題があります。プログラムは、2で割り切れない任意の数に対して真を返します。したがって、ループが完全に実行された後でreturn trueステートメントを置くだけです。

def prime?(integer) 
    return false if integer < 2 
    (2..integer - 1).each do |x| 
     if (integer % x) == 0 
      return false 
     end 
    end 
    true 
end 
+0

このメソッドは素数でない場合でもfalseを返さないようです...私の素数チェックでは論理的な問題がありますか? –

+0

それは私のために正しく動作します、どうやってテストしましたか? –

+0

1と0の場合だけではないと思う。 –

0

別の方法として、変数をtrueに設定して開始します。

def prime?(integer) 
    (2..integer - 1).each {|x| return false if (integer % x) == 0 } 
    true 
end 
+1

'val'を' false'に設定してから 'true'に戻すことができます。 '2'と' integer-1'の間の因数が見つかると 'false'を返すだけです。そのような要素がない場合は、trueを返します。変数 'val'は必要ありません。 –

+0

ありがとうございました、フィードバックがよく受け取りました。 – gonzalo2000

+0

あなたの答えを編集することができます –

関連する問題