以下是我对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代码时,它似乎永远存在。什么是蟒蛇表现在这里很差?
答案 0 :(得分:2)
因为Python是一种解释型语言,而C ++是一种编译语言。
请参阅此堆栈溢出问题,以更深入地描述两者之间的差异。请注意,这触及了它的表面。
Compiled vs. Interpreted Languages
另请参阅Python网站上的这个页面,了解Python与其他编程语言相比的简要描述。
答案 1 :(得分:2)
A)Python被解释,C被编译。后一类几乎总是比前者快。
B)isPrime
被执行多次。在其中,你有range(n/2)[3::2]
,它将多次构造(一个相当大的)数组。相比之下,您的C代码只有一个简单的循环,没有内存分配和初始化。
long
尺寸。
答案 2 :(得分:0)
如前所述,Python是一种解释型语言,但另一个缺点是,您很可能通过IDE(如IDLE或IDLE3)运行它。这些是使用Python ,并且可以占用比编译语言(如C ++)更多的CPU使用率。我希望这对你有利于任何方式。 〜Th3T3ch13