2013-10-09 3 views
-1

간단한 작업에는 문제가 있습니다. 그러나 몇 시간 동안 알아낼 수 없으며 예제도 찾을 수 없습니다. 내가 만들고 싶어Ruby : 하나의 숫자 만 출력 된 소수 번호 목록

것 -, 루비 5 소수 (11)

내가 소수 생성을위한 코드가 있음을 보여줍니다 - 루비는 소수의 목록을 생성은, 사용자가 (오 예) 번호를 입력 -

def isPrime(n) 
    for i in 2...n 
     return false if (n%i) == 0 
    end 
end 

(2..1000).each { |x| puts x if isPrime(x) } 
+0

당신은 어떤 루비 튜토리얼을 통해 적이 사용자의 입력을 읽고? 입력을 숫자로 변환 하시겠습니까? 그 많은 온라인 예가 있어야합니다. 그런 다음 사용자 입력을 성공 카운터로 사용하여 소수 생성기를 반복하면됩니다. – lurker

+0

예. 저는 현재 대학 1 학년 때 루비를 공부하고 있습니다. 몇 가지 복잡한 작업을했는데 막 막혔습니다. 내 루비 이해에 구멍이있다. –

답변

1

먼저 배열에 소수를 저장해야합니다 : Enumerable#select를 사용

@primes = [] 
(2..1000).each do |x| 
    @primes << x if isPrime(x) 
end 

또는 짧은 비트 :

@primes = (2..1000).select { |x| isPrime(x) } 

이제 당신이 처리 할 수있는 사용자 입력 :

loop do 
    print "enter a number: " 
    n = gets.to_i 
    puts @primes.fetch(n-1) { "unknown prime" } 
end 

Kernel#gets은 STDIN에서 한 줄을 읽습니다. String#to_i은 입력을 정수로 변환하고 (마지막 줄 바꿈을 무시) Array#fetch은 배열에서 n-1 색인에서 소수를 가져 오거나 알 수없는 소수 (배열 외부)에 대한 메시지를 반환합니다.

BTW, 당신은 방법 이름을 snake_case을 사용해야 바람직

def is_prime(n) 
    # ... 
end 

와 술어 방법에 대한 ?를 사용

def prime?(n) 
    # ... 
end 
+0

완벽한, 감사합니다! –

0

gets을 사용하여 명령 줄에서 입력하십시오.

또한, 루비는 유용하게 사용할 수있는 Prime 도서관이 있습니다

require 'prime' 

puts "Which prime?" 
x = gets.chomp.to_i 

puts "Prime ##{x} is: #{Prime.first(x).last}" 

실행 :

gets 외에도
 
$ ruby prime.rb 
Which prime? 
5 
Prime #5 is: 11 
+0

감사! 예, 제가 생각하기에, 정말 쉽습니다. 그러나 라이브러리를 사용하지 않고 어떻게 만들 수 있습니까? 저는 작업 규정을 소홀히하고 싶습니다. 제 발전기는 가치가 있습니까? –

+0

입력에 관계없이 2..1000부터 모든 소수를 출력합니다.소수를 찾을 때마다 카운터를 유지해야하며 해당 카운터가 입력 된 값이면 인쇄하십시오. 또한 2..1000에 포함되지 않는 많은 수를 입력 할 수 있으므로 훨씬 더 큰 범위가 필요할 수도 있습니다. 뿐만 아니라 그것을 위해 카운터를 사용하는 것을 고려하십시오, 그래서 그것은 제한없이 성장할 수 있습니다. 행운을 빕니다! –

0

, 당신은 카운터의 어떤 종류의 솔루션에 도달 추가 할 수 있습니다 .

예를 들어, 사용자가 다섯 번째 소수를 원하면 카운터가 0부터 시작하고 메서드가 실행될 때마다 카운터가 +1에 도달 할 때까지 카운터가 +1 올라갑니다.

모든
counter=0 
counter+=1 
until counter =userinput