以下是我对 Project Euler 的 third problem 的回答.这是 python 实现:
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性能这么差是怎么回事?
最佳答案
A) Python 被解释,C 被编译。后一类几乎总是比前一类快。
B) isPrime
被执行了很多次。其中,您有 range(n/2)[3::2]
,它将多次构造(相当大的)数组。相比之下,您的 C 代码只有一个简单的循环,没有内存分配和初始化。
C) Tony D 的问题评论可能很有值(value)。检查您的 long
尺寸。
关于Python 代码比相同的 C++ 代码慢得多?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/29224965/