最高质数

Highest Prime Number

我试图找到给定整数的最大质数。我可以让代码的第一部分工作,但是我检查以查看因子是否为素数的部分不起作用。我没有收到任何错误,但我收到的输出(放置)是空白的,所以我认为正在输出 nil 。我的代码有什么问题?

def highestprime num

  i = 1
  counter = 0
  count = -1
  factors = []
  primes = []

  while (i < num/2) #checks for all factors of number
    i += 1
    if (num%i == 0)
      factors.push(i) #adds all factors to the end factors array
    end
  end

  while (counter < factors.length) #goes through whole array
    counter += 1
    count += 1
    while (i < factors[count]) #tests for particular index in array
      i += 1
      if (factors[count]%i == 0 and i != factors[count]) #if factor is divisible by a number, it is not prime, so break
        break
      elsif (factors[count]%i != 0 and i != factors[count]) #if it is not divisibe, then keep iterating
        next
      elsif (i == factors[count]) #if the end has been reached, then add to primes array
        primes.push i
      end
    end
  end
  puts primes.pop #print the biggest(last) prime number
end

第一个循环将i的一些值压入factors;当该循环完成后,i 至少与 factors 中的每个值一样大。嵌套的 while 循环是唯一可以将任何东西推入 primes 的地方,它只会在 i 小于 factors 中的某个值时运行,而我们刚刚建立的这种情况永远不会发生。

我看到您在循环之间重复使用迭代器变量 i,但我没有看到您在哪里将它重置回 1

也许是?

您应该查看 prime 图书馆。您可以用几行重写整个内容:

require 'prime'
def highestprime num
  Prime.reverse_each(num) { |p| return p }
end

puts highestprime(10)