Pourquoi mon calcul est-il tellement plus rapide en C # que Python

Ci-dessous est un simple morceau de processus codés dans C# et Python respectivement (pour ceux d'entre vous curieux de connaître le processus, c'est la solution pour le Problème N ° 5 de Projet Euler).

Ma question est, le C# code ci-dessous ne prend que 9 secondes pour effectuer une itération, tandis que l'achèvement de Python code 283 secondes (pour être exact, 283 secondes sur Python 3.4.3 - 64 bits et 329 secondes sur Python 2.7.9 - 32 bits).

Jusqu'à présent, j'ai codé des processus similaires à la fois dans C# et Python et le temps d'exécution des différences ont été comparables. Cette fois, cependant, il y a une extrême différence entre le temps écoulé.

Je pense, une partie de cette différence surviennent à partir de la liste type de variable du langage python (je soupçonne, python convertit une partie des variables en double), mais ce qui est encore difficile à expliquer.

Ce que je fais mal?

Mon système: Windows 7 64 bits,

C# VS Express 2012 (9 secondes)

Python 3.4.3 64 bits (283 secondes)

Python 2.7.9 32 bits (329 secondes)

c-sharp code:

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();
        }
    }
}

et le code 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))

source d'informationauteur ssd