2009-12-13 46 views
0

希望的东西newbish不到我最后...红宝石:“在'<=':与长整数数组的比较失败(引发ArgumentError)”

总之,我做了一下上一个小应用程序编码的那将数字简化为素数,主要用于帮助小作业,如家庭作业。

然而,一个特定的方法是给我在标题中提到的错误:

def get_simps(num) 
    curr = 2 
    print("Working...") 
    while (curr <= num) 
    #If they divide cleanly, then it's a simplified form 
    if (num % curr == 0) 
     res = [curr, num/curr] 
     break 
    end 
    curr += 1 
    end 
    print("\n") 
    return res  
end  

凡说法NUM此语句不提供:

print("Insert number here: ") 
num = gets().chomp().to_i() 

因此使得错误怪异:为什么说我比较了Fixnum和ARRAY?我也是这样做的:

if (num.class() == curr.class()) 
print "Cheese" 
end 

它打印奶酪。为什么错误的原因呢?

+0

Copypasting到IRB与'get_simps调用(gets()函数。的Chomp()。to_i()) '不会给我一个错误(虽然它确实给出了错误的结果:get_simps(15000)=> [2,7500] – Tordek 2009-12-13 00:32:50

+0

你发布的代码对我来说工作正常。你是否在做'get_simps(get_simps(20 )'' – 2009-12-13 00:33:28

+0

此外,“错误”,因为我期待它返回一个素数分解的数字 – Tordek 2009-12-13 00:35:13

回答

1

公布看起来并不像它应该给所描述的错误,除非你在不经意间给它一个数组的代码。

你可能想看看divmod()函数,这可能有点清理内部循环。如果您的最小素数因子很大,您将执行大量不必要的整数除法。

这不是你要找的答案,但一个特别优雅的Ruby的首要因素解决方案,可以发现here

+0

感谢您的建议。 我从头开始重写了整个算法(crap-o-rithm),它在性能上似乎没问题。 – new123456 2009-12-13 16:22:43