282842712474 发表于 2014-10-30 07:44:15

Mathematica的NextPrime为什么快那么多

用Mathematica做NextPrime,只需要1.25s;但我在Python上调用gmpy2(GMP的一个版本)的nextprime做同样的工作时,发现需要6s左右。
我以为是Python本身效率不行,于是用C++测试了一下,发现GMP的nextprime所用时间还是6s左右,排除了编程语言的问题。
#include <gmp.h>
#include <iostream>
using namespace std;

int main() {
mpz_t t; //mpz_t
        mpz_init(t);
        mpz_ui_pow_ui(t,10,1000);
        mpz_nextprime(t, t);
        gmp_printf("%Zd\n", t);
mpz_clear(t);
return 0;
}
这该怎么解释呢?是算法的强度不同,还是计算上的优化?

cn8888 发表于 2014-10-30 09:20:29

你知道为什么用c语言写Linux与Unix,而不是c++吗?
因为C语言快!
mathematica就是用C语言写的

cn8888 发表于 2014-10-30 09:21:37

你比我强,居然还会用c++调用!
我这个菜鸟只会用mathematica

cn8888 发表于 2014-10-30 09:22:35

做比较之前,最好确定所用的素性判定算法一样!这样才有比较的价值

282842712474 发表于 2014-10-30 09:57:52

@wayne 这都是加上打印的时间吗

才1000位,打印时间可以忽略了...

wayne 发表于 2014-10-30 10:29:11

282842712474 发表于 2014-10-30 09:57
@wayne 这都是加上打印的时间吗

才1000位,打印时间可以忽略了...

的确,1000位打印耗时可以忽略。
我刚才 测试了下:
楼主的GMP代码,gcc编译,运行耗时是1.54s,
命令行版本的Mathematica是1.03s

无心人 发表于 2014-11-4 10:59:22

wayne 发表于 2014-10-30 10:29
的确,1000位打印耗时可以忽略。
我刚才 测试了下:
楼主的GMP代码,gcc编译,运行耗时是1.54s,


1000位打印怎么能忽略啊!
页: [1]
查看完整版本: Mathematica的NextPrime为什么快那么多