素数数组
我刚刚开始在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 % x
。 x % 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
必须是素数。