素数数组

时间:2014-06-08 21:20:27

标签: ruby arrays

我刚刚开始在红宝石上弄脏手,并想知道是否有人可以帮助我使用这一系列的素数示例。我从项目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

2 个答案:

答案 0 :(得分:1)

假设您要测试13195是否为素数,并且您希望a保留一个列为哪些数字的列表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

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

答案 1 :(得分:0)

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

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