素数数组

我刚刚开始在ruby上弄脏手,并想知道是否有人可以帮助我使用这一系列的素数示例。 我从项目Euler中得到了问题,我希望ruby打印一个素数数组。 但是,每次运行程序时,它只输出“0”。 有人可以在这里说清楚。 先感谢您。

def prime x = 13195 count = 0 a = [ ] while count < x if count % x == 0 a.push(count) a.sort end count += 1 end puts a end 

假设你想测试13195是否是素数,你想要一个列出哪些数字分成13195

您需要从2开始count ,因为包含素数的每个数字都可以被1整除。您还需要使用x % count而不是count % xx % count将x除以count并给出余数(正确检查为0)。

 def prime x = 13195 count = 2 a = [ ] while count < x if x % count == 0 a.push(count) end count += 1 end a end arr = prime p arr #this will print out a list of numbers which fit into 13195 arr.size == 0 #true if number is a prime, false otherwise 

请注意,您可以在此算法中进行大量优化,以检查数字是否为素数 - 即您的for循环条件可以是:

 sqrt = Math.sqrt(x) while count < sqrt 

你只需要检查你的号码的平方根,看看它是否是一个素数

您的数组为0,因为count总是小于x ,因此将count除以x ,就像模数运算符一样,总是返回0。

您的变量count命名不佳; 我会称之为f因素。 它应该初始化为2,而不是0.你的模数运算符是相反的; 它只是x % f而不是相反。 并且你的while循环应该在f * f > x立即停止,因为此时剩余的x必须是素数。