Следующим является мой ответ на проект Euler's third problem. Вот реализация питон:Код Python медленнее, чем тот же код на C++?
def isPrime(n):
for i in range(n/2)[3::2]:
if n % i == 0:
return False
return True
def largestPrime(n):
for i in range(3, n/2):
if n % i == 0 and isPrime(n/i):
return n/i
return -1
largestPrime(600851475143)
И здесь та же реализация переписан в C++:
#include <iostream>
using namespace std;
bool isPrime(long n)
{
for(int i = 3; i < n/2; i+=2)
{
if(n % i == 0)
return false;
}
return true;
}
long largestPrime(long n)
{
for(int i = 2; i < n/2; i++)
{
if(n % i == 0 and isPrime(n/i))
return n/i;
}
return -1;
}
int main()
{
cout << largestPrime(600851475143) << endl;
return 0;
}
Когда я запускаю код C++, он вычисляет правильный ответ (6857) в течение нескольких секунд. Но когда я запускаю код python, он, кажется, продолжается вечно. Что это такое, что производительность python здесь настолько бедна?
'Python' - это тот, кто открывает дверь и снимается. «C++» - это тот, кто стучит. –
Я не знаком с python, но работает ли 'range' с 64-битными целыми числами? – Matthew
Что такое 'sizeof (long)' для вашей C++-программы? Если это 32 бита, число, которое вы переходите на 'maximumPrime', будет усечено, и если ответ будет правильным, то, скорее всего, алгоритму по совпадению не нужны биты более высокого порядка, но он может работать не надежно для всех остальных чисел , Python - с другой стороны - использует что-то логически похожее на C++-библиотеку GMP для обработки целых чисел произвольной длины, хотя и намного медленнее. –