Python代码比相同的C ++代码慢吗?

时间:2015-03-24 04:19:12

标签: python c++ performance

以下是我对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代码时,它似乎永远存在。什么是蟒蛇表现在这里很差?

3 个答案:

答案 0 :(得分:2)

因为Python是一种解释型语言,而C ++是一种编译语言。

请参阅此堆栈溢出问题,以更深入地描述两者之间的差异。请注意,这触及了它的表面。

Compiled vs. Interpreted Languages

另请参阅Python网站上的这个页面,了解Python与其他编程语言相比的简要描述。

https://www.python.org/doc/essays/comparisons/

答案 1 :(得分:2)

A)Python被解释,C被编译。后一类几乎总是比前者快。

B)isPrime被执行多次。在其中,你有range(n/2)[3::2],它将多次构造(一个相当大的)数组。相比之下,您的C代码只有一个简单的循环,没有内存分配和初始化。

C)Tony D的问题评论很可能有价值。检查long尺寸。

答案 2 :(得分:0)

如前所述,Python是一种解释型语言,但另一个缺点是,您很可能通过IDE(如IDLE或IDLE3)运行它。这些是使用Python ,并且可以占用比编译语言(如C ++)更多的CPU使用率。我希望这对你有利于任何方式。    〜Th3T3ch13

相关问题