pypy的速度

56 篇文章 0 订阅
42 篇文章 1 订阅

无聊作PE http://projecteuler.net/problem=10 , 求2百万以下数的所有数的总和

python 随便写了一个

big = 2000000
import time

plst = [2, 3, 5, 7, 11, 13]
t1 = time.time()
for i in xrange(17, big, 2):
    for p in plst:
        if i%p == 0:
            break
        if p*p > i:
            plst.append(i)
            break

print time.time() - t1
#print len(plst)
print sum(plst) 

然后

$ python peuler10.py 
12.4184100628
142913828922

太慢了,不能忍受,用C试了下:

#include <stdio.h>
#include <time.h>

int main(void)
{
    clock_t begin, end;
    unsigned long big = 2000000;
    unsigned long pl[150000] = {2,3,5,7,11,13};
    unsigned long i = 0;
    unsigned int max = 6;
    begin = clock();
    for(i=17;i<big;i+=2){
        int j = 0;
        while(1){
            if(i%pl[j] == 0)
                break;
            if(pl[j] * pl[j] > i){
                pl[max] = i;
                max += 1;
                break;
            }
            j += 1;

        }

    }
    big = 0;
    for(i=0; i < max; i++){
        big += pl[i];
    }
    end = clock();
    double cost = (double)(end - begin)/CLOCKS_PER_SEC;
    printf("%ld\n", big);
    printf("%lf seconds\n", cost);

}

$ ./a
142913828922
0.750000 seconds

这差距实在是太大了, 又祭起pypy试试:

$ pypy peuler10.py -0jit
0.665678977966
142913828922

竟然比C还快。

pypy是python的一线希望,就是那些扩展不知道怎么办。好像很多脚本语言都有如是困境, PHP有最近facebook搞出的HipHop解释器,js因为V8现在势头正猛,不过都还有一定差距。还是更看好go,go也比较合我口味。

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值