最近、私はいくつかの簡単なプロジェクトのオイラー問題を解決し、RubyとC++でそれらを解決してきました。しかし、Collatzの推測に関するProblem 14については、コードをRubyに翻訳して9秒で解決しましたが、C++コードは終了する前に約30分間続きました。なぜこのRubyコードは、同等のC++コードよりもはるかに高速ですか?
その違いは私には信じられないほどです - 私はいつも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;
}
実行時間 - 私は正直わかりませんが、それは本当に長い時間です。
とRuby:
#!/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秒。
ここで何が起こっているのでしょうか?
P.S. C++コードはRubyコードよりも速く実行され、100,000に達するまで続きます。
'endl'を' '\ n" 'に変更します。これはストリームのフラッシュを行い、バッファされていないIOは実際には遅いからです。 –
C++をどのようにコンパイルしますか? – selalerer
はこれを行いますが、数値が大きくなるとプリントの間に数分かかることがありますが、endlと "\ n"の違いは無視されます –