【SICP练习】22 练习1.28



练习1.28

这道题主要分为三个部分:

1、非平凡平方根,并添加到expmod函数中

2、类似于fermat-test的过程

3、通过已知的素数和非素数来检验

下面我们首先来写出能够在遇到非平凡平方根的时候报错的函数,在这个函数中:当x不等于1,x不等于(n-1),并且x的平方对n取余等于1,这三个条件都为真时则可以说遇到了“1取模n的非平凡平方根”。下面是该函数:

(define (not-square-root? x n)

(and (not (= x 1))

    (not (= x (- n 1)))

    (=1 (remainder (square x) n))))

然后我们要将这个函数添加到expmod中,在cond里面添加一项即可:

(define (expmod base exp m)

   (cond ((= exp 0) 1)

         ((not-square-root? base m) 0)

         ((even? exp)

            (remainder (square (expmod base (/ exp 2) m)) m))

     (else (remainder (* base (expmod base (-exp 1) m)) m))))

第一步我们已经完成了,下面来看看第二步。在fermat-test中,已经有了一个try-it函数,但这个函数在这道题里不适用,因此我们来自己写一个产生随机数的函数。这个函数用来生成大于0并且小于n的随机数。

(define (zero-to-n-random x)

      (let((r (random x)))

     (if (not (= r 0))

         r

             (zero-to-n-randomx))))

random并不会参数负数的随机数,也不能用负数作为参数来产生随机数。下面我们来继续完成miller-rabin-prime函数。

(define (miller-rabin-prime? n)

   (let((x (ceiliing (/ n 2))))

       (miller-rabin-test n x)))

(define (miller-rabin-test n x)

   (cond ((= x 0) #t)

         ((= (expmod (zero-to-n-random n) (- n 1) n) 1)

      (miller-rabin-testn (- x 1)))

         (else #f)))

最后还剩下测试的工作了:

(miller-rabin-prime? 1729)

;Value: #f

(miller-rabin-prime? 2821)

;Value: #f

(miller-rabin-prime? 31)

;Value: #t

时间: 2024-10-14 09:44:33

【SICP练习】22 练习1.28的相关文章

百度6.22和6.28事件:站长反击但仍需反思

百度6.22和6.28事件,也许是本年之中让站长记忆最为深刻的一年,事已经发生,站长需要从容,淡定,接受一个全新的百度,在这其中不乏有部分站长采取了一些不理智的做法,如图     图片中的对话不是PS的,的确是真实的,百度官方声称"在我们的评估中,本次升级将会影响5%的搜索流量,此措施已经生效",我们在各大论坛,QQ群,站长网都会看到这样的信息,5%的搜索量,已经让很多站长趴倒在地了,站起来需要很长时间. 随着时间的推长,恶意点击百度竞价的站长也越来越多,目前已经有人组成10w的站长参

百度6.22和6.28 K站后网站如何恢复做法

最近站长圈里讨论得最多的就是"百度K站"这个事情了,事件的导火线是百度6.22和6.28两次反作弊更新,百度本次更新主要针对低质量站点在搜索结果中展现较多的情况进行了控制,部分无原创.或者伪原创的低质量站点甚至被K.有的站长心里很有怨气,于是聚集起来向百度"讨说法".对于这个事情,我也来说说自己的看法. 一:这次百度K站,哪类网站最受伤 通过看网上一些相关帖子和对身边一些朋友进行调查了解,这次被百度K的网站主要是无原创的网站,以及原创内容很少,只通过采集和修改内容的

解读:百度官方公告对于6.22、6.28事件解释

中介交易 http://www.aliyun.com/zixun/aggregation/6858.html">SEO诊断 淘宝客 云主机 技术大厅 黑色六月百度给予各位站长的阴霾已经渐渐的退散,此次6.22和6.28事件是百度近一年最大一次调整过程.据业界各大知名网站对于此次算法调整投票显示,在此期间平均73%网站受到不同程度的影响,而涉及到的行业也是形形色色的,波及面之广实属罕见.7月2日14时百度搜索工程师Lee也在百度站长论坛中给出了一份来自于百度网页搜索反作弊团队的"官

有图有数据为你分析6.22和6.28百度更新K站

中介交易 SEO诊断 淘宝客 云主机 技术大厅 今天QQ被网友问疯了,都是很多站长网站大面积K站的事宜询问.其实,我们杭州seo团队观察到的现象是昨天晚上10点左右,那时我们公司seo群里就有成员说我们旗下有站点被K了,收录异常,让大家都看看每个人负责的那些站情况.之后,就陆续有成员反馈出来,出事了!当时得了粗略的结论:要么是我们的站本身出了问题,导致情况发生;要么是百度在调整,估计后面几个小时还会持续,如果这情况将有其他人会反馈问题. 我当时在群里安慰大家情绪,别激动,别失落:等也是一种力量.

比亚迪电子上半年毛利润下降22%至5.28亿

8月30日晚间消息,比亚迪电子(国际)有限公司(00285.HK,下称"比亚迪电子")公布了截止6月30日的2009年中期业绩,虽然营业额达到人民币38.01亿, 同比增长5%,但毛利润则大幅下降了22%. 比亚迪电子表示,营业额较去年稍微上升,主要得益于手机部件及模组业务增长所致.其手机部件及模组销售额大24.9亿,同比增长约22%,占公司整体销售额约66%. 2009年上半年,全球手机需求受经济危机影响下滑严重,国际手机大厂对上游手机部件生产商供货价格敏感度进一度提升. 比亚迪在今

根据6.22和6.28事件分析百度对低质量内容处理

  网站数据 我查了下他站点的数据,22号的更新网站收录没有什么变化,28号收录减少了很多,但是29号又恢复了.虽然无法看到百度索引量的数据,从下图可以看出虽然百度收录在跌撞起伏,这些都不是重点,重点是百度之前公布的针对低质量内容的策略,百度已经明确的说出了自己有一套完整的体系,但我们来看看这个网站收录的内容都是什么?   从上述数据中我们可以看到百度和谷歌的收录量相差很大,对于这样的站点我第一反应会猜测这个站点的内容质量很烂,经过下面的详细分析大家可以看到.虽然这些数据都是很准确但是也能反映出

从“百度6.22、6.28更新的解释”想到的

中介交易 http://www.aliyun.com/zixun/aggregation/6858.html">SEO诊断 淘宝客 云主机 技术大厅 不知不觉中,6.22-6.28号一周,6.28-7.2号五天时间,这些天百度发生了大范围的调整,就在7.2号这一天,LEE发表了对这些更新的说明,同时也解释了百度6月22号,和6月28号这两天到底发生了什么情况,那么关于这些事项,笔者有话说, 毕竟经过这样一次调整,自己的网站也在这个行列中,也是期待着百度可以回复我的权重,那么就7月2号LEE

从6.22到6.28的演变你究竟看到了什么

在站长群里,这两个日期所发生的事情,无疑成了热门的讨论,我做这行的时间不算长,这次是我所看到百度最大规模的一次变动,当自己的网站突然K的时候,我积极的寻找原因,同行的不同行的,仔细分析,仔细观察,也去各大论坛看大家的反馈.下面是我自己的一些观点: 1.百度论坛公告 相信很多站长在百度论坛的公告中有看过这篇文字,这篇文字的发辫时间是5.23   关于新闻站质量的判断原则.搜索引擎对低质量的认定界限,以及会给出的处理,里面写的非常清楚,甚至举例说明什么样的算低质量新闻内容. 2.谷歌变,百度变 谷歌

百度8.22算法升级,今天中午”生效“

百度6.22,6.28算法升级导致大批量的网站被降权.收录减少.甚至被K,从这一系列的动作可以看出百度对打击垃圾内容的决心以及坚持不懈为用户提供优质原创内容的目标. 近期随着360搜索的诞生,3B大战已经拉开帷幕,360的搜索虽然不伦不类但是其游览器转化成流量的能力不容小视,百度则继续优化自身的武功,以对抗360搜索的诞生,以为用户提供更优质的内容为杀手锏来与对手抗争. 百度站长社区8.22发布公告<百度算法升级,将影响作弊站点收录及低质站点的排序>文中描述将打击的主要为胡乱采集.超链作弊等影