最近我一直在经历一些简单的项目欧拉问题,并用 Ruby 和 C++ 解决它们。但是对于关于 Collatz 猜想的第14题,我的 C++ 代码运行了大约半小时,然后我终止了它,但是当我将代码翻译成 Ruby 时,它在 9 秒内就解决了。
这种差异让我难以置信——我一直被认为 C++ 几乎总是比 Ruby 快,尤其是在数学处理方面。
我的代码如下。
C++:
#include <iostream>
using namespace std;
int main ()
{
int a = 2;
int b = 2;
int c = 0;
while (b < 1000000)
{
a = b;
int d = 2;
while (a != 4)
{
if (a % 2 == 0)
a /= 2;
else
a = 3*a + 1;
d++;
}
if (d > c)
{
cout << b << ' ' << d << endl;
c=d;
}
b++;
}
cout << c;
return 0;
}
运行时间 - 老实说,我不知道,但这真的很长。
和红宝石:
#!/usr/bin/ruby -w
a = 0
b = 2
c = 0
while b < 1000000
a = b;
d = 2
while a != 4
if a % 2 == 0
a /= 2
else
a = 3*a + 1
end
d+=1
end
if d > c
p b,d
c=d
end
b+=1
end
p c
运行时间 - 大约 9 秒。
知道这里发生了什么吗?
PS C++ 代码运行速度比 Ruby 代码快很多,直到达到 100,000。