2

画面上の方法からできない理由putsや何かを理解するために、フィードバックが必要です。printこれは、1001 番目の素数を見つける問題を解決するために私が書いた簡単なスクリプトです。ありがとう

def primes
  # iterates through numbers until it has the 1001th prime number and returns it.
  # I chose to create the num_primes variable instead of counting the number of 
  # elements in in_prime_array every iteration
  # based upon a guess that it would be faster to check.

is_prime_array = []
  num_primes = 0
  i = 2
  loop do
    is_prime_array << i && num_primes += 1 if is_prime?(i) == true 
    i += 1
    break if num_primes == 1001
    end
  is_prime_array[1001]
end


def is_prime? (num)
# Checks to see if the individual number given is a prime number or not.
i = 2
  loop do
    if i == num
      return true
    elsif num % i == 0
      return false
    else
      i += 1
    end
  end
end

助けてくれてありがとう!


編集


私はあなたのアドバイスを受けて、このコードを試しました:

def is_prime? (num)
  # Checks to see if the individual number given is a prime number or not.
  i = 2
  loop do
    if i == num
      return true
    elsif num % i == 0
      return false
    else
      i += 1
    end
  end
end

i = 0
count = 0
loop do
  count += 1 if is_prime?(x)
  puts "#{i}" if count == 1001
  break
end

それはまだ何も返しません。うーん

4

3 に答える 3

2
i = 0
count = 0
loop do
  if is_prime(i)
    count += 1
  end

  if count == 10001
    puts "#{i}"
    break
  end
end

簡単な方法:)

于 2013-04-29T10:05:50.460 に答える
1

あなたは何を「入れよう」としていますか?最初に気付いたのはprimes、ファイル内に への呼び出しがないため、このコードを単独で実行しようとしても何も起こらないということです。何も印刷されていないのはそのためかもしれません。

ループ内でいくつかの変数を出力する方法の例を次に示します。

loop do
  ...
  puts "At iteration #{i}, we have prime=#{is_prime?(i)}"

ご存じない場合は、ステートメントを文字列で囲むことは、その位置の文字列に#{<statement goes here>}の戻り値を追加することと同じです。<statement goes here>これは"Str " + blah + " rest of str"Java などの言語と同じです。

于 2013-04-29T09:46:10.540 に答える
1

それはオフバイワンエラーです。配列に 1001 個の要素がある場合、最後の要素はインデックス 1000 になります。

あなたが持っている場所

is_prime_array[1001]

に変更します

is_prime_array[1000]

そして、これを行うことができます:

puts primes
 => 7927

あなたも持つことができます

is_prime_array.last

特定のインデックス番号の代わりに。

于 2013-04-29T09:45:07.887 に答える