我刚刚开始在红宝石上弄脏手,并想知道是否有人可以帮助我使用这一系列的素数示例。我从项目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
答案 0 :(得分:1)
假设您要测试13195
是否为素数,并且您希望a
保留一个列为哪些数字的列表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
你只需要检查你的号码的平方根,看看它是否是素数
答案 1 :(得分:0)
您的数组为0,因为count
始终小于x
,因此将count
除以x
,就像模数运算符一样,始终返回0。
您的变量count
命名不佳;我会称之为f
因素。它应该初始化为2,而不是0.你的模数运算符是相反的;它只是x % f
而不是相反。并且while
循环应该在f * f > x
后立即停止,因为此时剩余的x
必须是素数。