找回密码
 立即注册

QQ登录

只需一步,快速开始

扫一扫,访问微社区

查看: 1377|回复: 7

[研讨] 正则表达式判断是否质数,是真的吗?

[复制链接]

已领礼包: 604个

财富等级: 财运亨通

发表于 2014-11-7 14:00:16 | 显示全部楼层 |阅读模式

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

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

×
http://zhan.renren.com/lisper?gi ... 50&checked=true
正则表达式判断是否质数,是真的吗?
论坛插件加载方法
发帖求助前要善用【论坛搜索】功能,那里可能会有你要找的答案;
如果你在论坛求助问题,并且已经从坛友或者管理的回复中解决了问题,请把帖子标题加上【已解决】;
如何回报帮助你解决问题的坛友,一个好办法就是给对方加【D豆】,加分不会扣除自己的积分,做一个热心并受欢迎的人!

已领礼包: 8121个

财富等级: 富甲天下

发表于 2014-11-7 15:29:10 | 显示全部楼层
本帖最后由 Highflybird 于 2014-11-7 15:35 编辑

这个只不过是小范围内的判断。一个不超过1000,一个不超过100,这个对实际没多少用途.
下面是我的质数判断代码。
  1. (defun IsPrime (p)
  2.   (if (> p 13)
  3.     (cond
  4.       ( (or (= (rem p 2) 0)
  5.             (= (rem p 3) 0)
  6.             (= (rem p 5) 0)
  7.             (= (rem p 7) 0)
  8.             (= (rem p 11) 0)
  9.             (= (rem p 13) 0)
  10.         )
  11.         nil
  12.       )
  13.       ( (and (RabbinMiller 2 p)
  14.              (RabbinMiller 7 p)
  15.              (RabbinMiller 5 p)
  16.         )
  17.         T
  18.       )
  19.       (t nil)
  20.     )
  21.     (and (member p '(2 3 5 7 11 13)))
  22.   )
  23. )

  24. (defun paw_mod( bs power diver)
  25.   (cond
  26.     ((zerop power)
  27.      1
  28.     )
  29.     ((= power 1)
  30.      bs
  31.     )
  32.     ((= (rem power 2) 0)
  33.      (paw_mod (rem (* bs bs) diver) (lsh power -1) diver)
  34.     )
  35.     (t
  36.       (rem (* (paw_mod (rem (* bs bs) diver) (/ power 2) diver) bs) diver)
  37.     )
  38.   )
  39. )

  40. (defun RabbinMiller (base num / D K N RET TT)
  41.   (setq n (1- num))
  42.   (setq d n)
  43.   (while (= (rem d 2) 0)
  44.     (setq d (lsh d -1))
  45.   )
  46.   (setq k (paw_mod base d num))
  47.   (if (or (= k 1) (= k n))
  48.     t
  49.     (progn
  50.       (setq tt (/ n 2))
  51.       (while (/= d tt)
  52.         (setq d (lsh d 1))
  53.         (if (= (paw_mod base d num) n)
  54.           (setq        ret t
  55.                 d tt
  56.           )
  57.         )
  58.         ret
  59.       )
  60.     )
  61.   )
  62. )



譬如: (IsPrime  12323)   ==>T
          (IsPrime  23111)    ==> nil





点评

(IsPrime 49069)=》nil 这个确实有问题。大师用了lsh ,这上函数看不懂了。  详情 回复 发表于 2014-11-10 08:58

评分

参与人数 1D豆 +5 收起 理由
/db_自贡黄明儒_ + 5 很给力!经验;技术要点;资料分享奖!

查看全部评分

论坛插件加载方法
发帖求助前要善用【论坛搜索】功能,那里可能会有你要找的答案;
如果你在论坛求助问题,并且已经从坛友或者管理的回复中解决了问题,请把帖子标题加上【已解决】;
如何回报帮助你解决问题的坛友,一个好办法就是给对方加【D豆】,加分不会扣除自己的积分,做一个热心并受欢迎的人!
回复 支持 反对

使用道具 举报

发表于 2014-11-8 13:25:46 | 显示全部楼层
49069 49081 49103 49109 49117 49121 49123 49139 49157 49169
49171 49177 49193 49199 49201 49207 49211 49223 49253 49261
49277 49279 49297 49307 49331 49333 49339 49363 49367 49369
49391 49393 49409 49411 49417 49429 49433 49451 49459 49463
49477 49481 49499 49523 49529 49531 49537 49547 49549 49559
49597 49603 49613 49627 49633 49639 49663 49667 49669 49681
49697 49711 49727 49739 49741 49747 49757 49783 49787 49789
49801 49807 49811 49823 49831 49843 49853 49871 49877 49891
49919 49921 49927 49937 49939 49943 49957 49991 49993 49999
函数通不过
论坛插件加载方法
发帖求助前要善用【论坛搜索】功能,那里可能会有你要找的答案;
如果你在论坛求助问题,并且已经从坛友或者管理的回复中解决了问题,请把帖子标题加上【已解决】;
如何回报帮助你解决问题的坛友,一个好办法就是给对方加【D豆】,加分不会扣除自己的积分,做一个热心并受欢迎的人!
回复 支持 反对

使用道具 举报

已领礼包: 604个

财富等级: 财运亨通

 楼主| 发表于 2014-11-10 08:58:45 | 显示全部楼层
Highflybird 发表于 2014-11-7 15:29
这个只不过是小范围内的判断。一个不超过1000,一个不超过100,这个对实际没多少用途.
下面是我的质数判断 ...

(IsPrime 49069)=》nil 这个确实有问题。大师用了lsh ,这个函数看不懂了。

点评

lsh 就相当于 二进制移位,譬如 (lsh 3 10) ==> 3* (2^10) 左移位 (lsh 48 -2) ==> 48/ (2^2) 右移位  详情 回复 发表于 2014-11-10 11:45
论坛插件加载方法
发帖求助前要善用【论坛搜索】功能,那里可能会有你要找的答案;
如果你在论坛求助问题,并且已经从坛友或者管理的回复中解决了问题,请把帖子标题加上【已解决】;
如何回报帮助你解决问题的坛友,一个好办法就是给对方加【D豆】,加分不会扣除自己的积分,做一个热心并受欢迎的人!
回复 支持 反对

使用道具 举报

已领礼包: 6530个

财富等级: 富甲天下

发表于 2014-11-10 09:50:58 | 显示全部楼层
  1. (defun tt (n)
  2.   (setq l '(3 2)
  3.         i 3
  4.   )
  5.   (while (< i (- n 1))
  6.     (setq i (+ i 2))
  7.     (if (isprime i)
  8.       (setq l (cons i l))
  9.     )
  10.   )
  11.   (reverse l)
  12. )

给鸟兄的加了这段代码进行捕捉,发现超过58441就无法判别了,算法不懂,看代码无法看,只好作罢。
论坛插件加载方法
发帖求助前要善用【论坛搜索】功能,那里可能会有你要找的答案;
如果你在论坛求助问题,并且已经从坛友或者管理的回复中解决了问题,请把帖子标题加上【已解决】;
如何回报帮助你解决问题的坛友,一个好办法就是给对方加【D豆】,加分不会扣除自己的积分,做一个热心并受欢迎的人!
回复 支持 反对

使用道具 举报

已领礼包: 8121个

财富等级: 富甲天下

发表于 2014-11-10 11:32:39 | 显示全部楼层
恩,存在bug,我以后调整看看。
论坛插件加载方法
发帖求助前要善用【论坛搜索】功能,那里可能会有你要找的答案;
如果你在论坛求助问题,并且已经从坛友或者管理的回复中解决了问题,请把帖子标题加上【已解决】;
如何回报帮助你解决问题的坛友,一个好办法就是给对方加【D豆】,加分不会扣除自己的积分,做一个热心并受欢迎的人!
回复 支持 反对

使用道具 举报

已领礼包: 8121个

财富等级: 富甲天下

发表于 2014-11-10 11:45:42 | 显示全部楼层
/db_自贡黄明儒_ 发表于 2014-11-10 08:58
(IsPrime 49069)=》nil 这个确实有问题。大师用了lsh ,这个函数看不懂了。

lsh 就相当于 二进制移位,譬如 (lsh 3 10)  ==>  3* (2^10)      左移位
       (lsh 48 -2) ==> 48/ (2^2)       右移位

点评

运行时间比较 Command: Command: w1 9.31323e-008 Command: Command: w2 1.08033e-007  详情 回复 发表于 2014-11-13 13:21

评分

参与人数 1D豆 +5 收起 理由
/db_自贡黄明儒_ + 5 热心帮忙奖!

查看全部评分

论坛插件加载方法
发帖求助前要善用【论坛搜索】功能,那里可能会有你要找的答案;
如果你在论坛求助问题,并且已经从坛友或者管理的回复中解决了问题,请把帖子标题加上【已解决】;
如何回报帮助你解决问题的坛友,一个好办法就是给对方加【D豆】,加分不会扣除自己的积分,做一个热心并受欢迎的人!
回复 支持 反对

使用道具 举报

已领礼包: 604个

财富等级: 财运亨通

 楼主| 发表于 2014-11-13 13:21:47 | 显示全部楼层
Highflybird 发表于 2014-11-10 11:45
lsh 就相当于 二进制移位,譬如 (lsh 3 10)  ==>  3* (2^10)      左移位
       (lsh 48 -2) ==> 48/ ( ...

运行时间比较
  1. ;;[功能] 是否质数
  2. ;;(Is-Prime 49069)=>T
  3. (defun Is-Prime        (n / FLAG I ROOT)
  4.   (cond
  5.     ((<= n 20)
  6.      (cond ((member n '(2 3 5 7 11 13 17 19)) T))
  7.     )
  8.     ((= (rem n 2) 0) nil)
  9.     (T
  10.      (setq root (sqrt n))
  11.      (setq i 1)
  12.      (while (and (<= (setq i (+ i 2)) root) (setq Flag (/= (rem n i) 0))))
  13.      Flag
  14.     )
  15.   )  
  16. )
  17. (defun C:w1 (/ T1)
  18.   (setq t1 (getvar "cdate"))
  19.   (Repeat 1000 (IsPrime 49069))
  20.   (PRINC(- (getvar "cdate") t1))
  21.   (PRINC)
  22. )
  23. (defun C:w2 (/ T1)
  24.   (setq t1 (getvar "cdate"))
  25.   (Repeat 1000 (Is-Prime 49069))
  26.   (PRINC(- (getvar "cdate") t1))
  27.   (PRINC)
  28. )

Command:
Command: w1 9.31323e-008

Command:
Command: w2 1.08033e-007


论坛插件加载方法
发帖求助前要善用【论坛搜索】功能,那里可能会有你要找的答案;
如果你在论坛求助问题,并且已经从坛友或者管理的回复中解决了问题,请把帖子标题加上【已解决】;
如何回报帮助你解决问题的坛友,一个好办法就是给对方加【D豆】,加分不会扣除自己的积分,做一个热心并受欢迎的人!
回复 支持 反对

使用道具 举报

您需要登录后才可以回帖 登录 | 立即注册

本版积分规则

QQ|申请友链|Archiver|手机版|小黑屋|辽公网安备|晓东CAD家园 ( 辽ICP备15016793号 )

GMT+8, 2024-6-29 09:53 , Processed in 0.333543 second(s), 43 queries , Gzip On.

Powered by Discuz! X3.5

© 2001-2024 Discuz! Team.

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