算术练习 2

转载自:https://mp.weixin.qq.com/s/ejK-u7Sc-inTZAmUd9wfiQ

4、在给定整数范围内,构造一个该范围的所有质数的列表。

 

1  :- ensure_loaded(p2_01).  

2

3  prime_list(A,B,L) :- 

4 A =< 2, %

5  !, 

6  p_list(2,B,L).

7  prime_list(A,B,L) :- 

8 A1 is (A // 2) * 2 + 1,

9 p_list(A1,B,L).

10

 

注释行:

1.  % 确保载入 is_prime/1谓词

2.  空行

3.  %列表是A到B范围的质数的列表

4.  限定数值A是小于等于二的

5.  截断

6.  %将小于等于2的数设置为2

7.  

8.   %过滤掉偶数

9.  %去处理表

10. 空行

 

11 p_list(A,B,[]) :- 

12 A > B

13 !.

14 p_list(A,B,[A|L]) :- 

15 is_prime(A),

16 !,

17 next(A,A1),

18 p_list(A1,B,L). 

19 p_list(A,B,L) :- 

20 next(A,A1),

21 p_list(A1,B,L).

22

 

注释行:

11. %当超出范围

12. %截断,递归终止

13. 截断

14. 

15. %判断是否为质数,如果A是质数则继续

16. 截断

17. %继续处理后续的数

18. %继续处理后续的质数

19. %A不是质数的情况

20. %继续处理后续的数

21. %继续处理后续的质数

22. 空行

 

23 next(2,3) :-

24 !.

25 next(A,A1) :- 

26 A1 is A + 2.

 

23. %质数的起始数,也是终止条件

24. %截断

25. 

26. %继续后续数值

 

结果如下:

?- prime_list(1,100,L),write(L).

[2,3,5,7,11,13,17,19,23,29,31,37,41,43,47,53,59,61,67,71,73,79,83,89,97]

L = [2, 3, 5, 7, 11, 13, 17, 19, 23|…].

 

5、哥德巴赫的猜想说:每个大于2的正偶数是两个质数之和。例如:28 = 5 +23。这是数论中最著名的事实之一,在一般情况下还没有被证明是正确的。从数字上已经证实了数量很的大它(比我们Prolog系统所能容纳的数量大得多)。编写一个谓词,以找到两个总和为给定偶数整数的质数。

 

1  :- ensure_loaded(p2_01).

2

3  goldbach(4,[2,2]) :-

4 !.

5  goldbach(N,L) :- 

6 N mod 2 =:= 0,

7 N > 4,

8 goldbach(N,L,3).

9

 

注释行:

1.  确保装入is_prime/1谓词

2.  空行

3.  证明的大的偶数从4开始

4.  截断<

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值