Python 代码比相同的 C++ 代码慢得多?

标签 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 代码时,它似乎永远持续下去。 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/

相关文章:

c++ - 在 C++ 中使用 vector

php - 如何在 PHP 中传递值并运行 C 程序(Web 应用程序)

ruby - Anagrams Code Kata,Ruby 解决方案非常慢

c# - 通知游戏对象发生变化的最佳方式? (Unity脚本组织/委托(delegate))

Python Django : Load Autofield to MySql Table using loaddata

python - 尝试通过 SQLite 中的复合主键长列表来选择行

python - 自动使 matplotlib 图像与其他子图标签齐平

python - 如何让 urlopen 处理文件中的 url 列表?

c++ - OpenMP 按需嵌套并行性

java - 低级数据存储 API 和 JDO/JPA 之间的性能是否存在显着差异?