Ниже приведен простой фрагмент процесса, закодированный в C#
и Python
соответственно (для тех из вас, кто интересуется процессом, это решение проблемы № 5 Project Euler).
Мой вопрос в том, что код C#
ниже занимает всего 9 секунд для повторения, а для завершения кода Python
требуется 283 секунды (точнее, 283 секунды на Python 3.4.3 - 64 бит и 329 секунд на Python 2.7.9 - 32 бит).
До сих пор я кодировал аналогичные процессы как в C#
, так и Python
, а разницы во времени выполнения были сопоставимы. Однако на этот раз существует крайняя разница между прошедшими временами.
Я думаю, что часть этой разницы возникает из-за гибкого типа переменных языка python (я подозреваю, что python преобразует часть переменных в double), но этого еще трудно объяснить.
Что я делаю неправильно?
Моя система: 64-разрядные версии Windows-7,
С# - VS Express 2012 (9 секунд)
Python 3.4.3 64 бит (283 секунды)
Python 2.7.9 32 бит (329 секунд)
c-sharp код:
using System;
namespace bug_vcs {
class Program {
public static void Main(string[] args) {
DateTime t0 = DateTime.Now;
int maxNumber = 20;
bool found = false;
long start = maxNumber;
while (!found) {
found = true;
int i = 2;
while ((i < maxNumber + 1) && found) {
if (start % i != 0) {
found = false;
}
i++;
}
start++;
}
Console.WriteLine("{0:d}", start - 1);
Console.WriteLine("time elapsed = {0:f} sec.", (DateTime.Now - t0).Seconds);
Console.ReadLine();
}
}
}
и код python:
from datetime import datetime
t0 = datetime.now()
max_number = 20
found = False
start = max_number
while not found:
found = True
i = 2
while ((i < max_number + 1) and found):
if (start % i) != 0:
found = False
i += 1
start += 1
print("number {0:d}\n".format(start - 1))
print("time elapsed = {0:f} sec.\n".format((datetime.now() - t0).seconds))