找回密码
 欢迎注册
查看: 22079|回复: 18

[求助] Mathematica的NextPrime为什么快那么多

[复制链接]
发表于 2014-10-30 07:44:15 | 显示全部楼层 |阅读模式

马上注册,结交更多好友,享用更多功能,让你轻松玩转社区。

您需要 登录 才可以下载或查看,没有账号?欢迎注册

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

  4. int main() {
  5.   mpz_t t; //mpz_t
  6.         mpz_init(t);
  7.         mpz_ui_pow_ui(t,10,1000);
  8.         mpz_nextprime(t, t);
  9.         gmp_printf("%Zd\n", t);
  10.   mpz_clear(t);
  11.   return 0;
  12. }
复制代码

这该怎么解释呢?是算法的强度不同,还是计算上的优化?

点评

这都是加上打印的时间吗  发表于 2014-10-30 09:52
毋因群疑而阻独见  毋任己意而废人言
毋私小惠而伤大体  毋借公论以快私情
发表于 2014-10-30 09:20:29 | 显示全部楼层
你知道为什么用c语言写Linux与Unix,而不是c++吗?
因为C语言快!
mathematica就是用C语言写的

点评

c++比c慢一般在大型code工程里,主要是因为使用了大量的类,STL等结构,虽然提高了编程效率和代码清晰性,但繁复的封装解包会略微降低运行效率。  发表于 2014-10-30 12:02
C++就算比C慢也不会慢这么多  发表于 2014-10-30 10:02
毋因群疑而阻独见  毋任己意而废人言
毋私小惠而伤大体  毋借公论以快私情
发表于 2014-10-30 09:21:37 | 显示全部楼层
你比我强,居然还会用c++调用!
我这个菜鸟只会用mathematica

点评

用gcc/g++做编译器,很容易调用。  发表于 2014-10-30 09:59
毋因群疑而阻独见  毋任己意而废人言
毋私小惠而伤大体  毋借公论以快私情
发表于 2014-10-30 09:22:35 | 显示全部楼层
做比较之前,最好确定所用的素性判定算法一样!这样才有比较的价值

点评

所以我才问是什么原因。究竟是算法原因还是计算上的优化,这是本帖的目的。  发表于 2014-10-30 09:58
毋因群疑而阻独见  毋任己意而废人言
毋私小惠而伤大体  毋借公论以快私情
 楼主| 发表于 2014-10-30 09:57:52 | 显示全部楼层
@wayne 这都是加上打印的时间吗

才1000位,打印时间可以忽略了...
毋因群疑而阻独见  毋任己意而废人言
毋私小惠而伤大体  毋借公论以快私情
发表于 2014-10-30 10:29:11 | 显示全部楼层
282842712474 发表于 2014-10-30 09:57
@wayne 这都是加上打印的时间吗

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


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

点评

该素数是 10^2000+4561  发表于 2014-10-30 12:32
我现在用的机器配置很差,10^2000的下一个素数,GMP花了56.8秒,Mathematica花了55.4秒  发表于 2014-10-30 12:32
你机器的配置比我高,显示不出明显差别,你可以改成2000位比较或者其他的合理值呀。  发表于 2014-10-30 12:21
毋因群疑而阻独见  毋任己意而废人言
毋私小惠而伤大体  毋借公论以快私情
发表于 2014-11-4 10:59:22 | 显示全部楼层
wayne 发表于 2014-10-30 10:29
的确,1000位打印耗时可以忽略。
我刚才 测试了下:
楼主的GMP代码,gcc编译,运行耗时是1.54s,

1000位打印怎么能忽略啊!

点评

哦,知道了  发表于 2014-11-5 11:31
已经测过,相差接近两个数量级  发表于 2014-11-5 10:11
能测试下具体多少么  发表于 2014-11-5 08:20
跟素数的计算时间相比,不在一个数量级,所以可以忽略  发表于 2014-11-4 17:30
毋因群疑而阻独见  毋任己意而废人言
毋私小惠而伤大体  毋借公论以快私情
您需要登录后才可以回帖 登录 | 欢迎注册

本版积分规则

小黑屋|手机版|数学研发网 ( 苏ICP备07505100号 )

GMT+8, 2024-11-22 01:18 , Processed in 0.025740 second(s), 17 queries .

Powered by Discuz! X3.5

© 2001-2024 Discuz! Team.

快速回复 返回顶部 返回列表