最高质数
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)
我试图找到给定整数的最大质数。我可以让代码的第一部分工作,但是我检查以查看因子是否为素数的部分不起作用。我没有收到任何错误,但我收到的输出(放置)是空白的,所以我认为正在输出 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)