2013-04-29 2 views
2

화면상의 제 방법 중 puts 또는 print을 사용할 수없는 이유를 알아내는 데 필요한 피드백이 필요합니다. 이것은 제가 1001 번째 소수를 찾는 문제를 해결하기 위해 작성한 간단한 스크립트입니다. 감사합니다Ruby - 소수 번호 계산기

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 

그것은 여전히 ​​아무 것도 반환하지 않습니다를. Hummm

+1

?'(가)'loop',로 변경 내부'나는> num''TRUE ''ELSIF를 반환 * 경우 ... '. –

+0

들여 쓰기가 엄격 해지면 삶이 더 나아질 것입니다. 'i = 2'와'is_prime_array = []'는 2 칸 이내 여야합니다. –

답변

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

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

간단한 방법 : 더 나은 효율을

+0

좋습니다. 나는 그것을 구현했지만 여전히 아무것도 반환하지 않을 것이다. – JDillon522

1

이것은 하나 하나의 오류입니다.

: 당신이 배열 1001 개 요소가있는 경우, 마지막 요소는

is_prime_array[1001] 

변경 그것에

is_prime_array[1000] 

을 그리고 당신이 할 수있는 인덱스 1000

에있을 것입니다

puts primes 
=> 7927 

is_prime_array.last 

특정 색인 번호 대신.

+0

좋은 지적입니다. 인덱싱이 0부터 시작한다는 것을 기억해야합니다. – JDillon522

+0

코딩 작업이 30 년 이상이 지난 후에도 새 프로젝트에서 동일한 실수를 반복합니다. 그래서 나는 이것을 보았다. –

1

"넣으려고"하시겠습니까? 가장 먼저 알아야 할 점은 파일에 primes에 대한 호출이 없으므로이 코드를 단독으로 실행하려고하면 아무 일도 발생하지 않는다는 것입니다. 어쩌면 그게 당신이 인쇄 된 것을 보지 않는 이유 일 수 있습니다. 당신이 모르는 경우

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

, 문자열 안에 #{<statement goes here>}과 함께 문을 둘러싸는 것은 <statement goes here>의 반환 값을 추가하는 것과 같습니다 여기

은 루프 내에서 몇 가지 변수를 인쇄하는 방법의 예 그 위치에있는 문자열에. 이것은 Java와 같은 언어로 된 "Str " + blah + " rest of str"과 동일합니다. 당신의`is_prime에

+0

죄송합니다. 스크립트에서 메소드를 썼을 뿐이며 호출하지 못했습니다. "puts primes"와 같은 것을 쓸 때에도 여전히 아무것도 반환하지 않습니다. 나는 심지어 오류를 얻지 않는다. – JDillon522

+0

추가 된 puts 문을 사용하여 코드를 실행하고 내 로컬 컴퓨터에서 Ruby 1.9.3을 사용하여'primes() '를 호출했습니다. puts가 작동합니다. 어딘가에서 함수를 호출하는지 확인하십시오 (다른 함수 내부에있는 경우 THAT 함수가 호출되는지 확인하십시오).이것을 테스트하기 위해 파일의 맨 아래에'primes()'를 추가했습니다. – Ben