codecamp

AI人工智能 查找素数

实例2:素数判断与生成

利用逻辑编程,我们可以从指定数字列表中筛选素数,也可以生成指定数量的素数,核心是将“素数的定义”转化为逻辑推理规则。

实现代码

## 导入所需库
from kanren import isvar, run, membero
from kanren.core import success, fail, goaleval, condeseq, eq, var
from sympy.ntheory.generate import prime, isprime
import itertools as it


## 定义素数判断的逻辑函数
def prime_check(x):
    # 若x是逻辑变量,生成无限个素数进行匹配
    if isvar(x):
        return condeseq([(eq, x, p)] for p in map(prime, it.count(1)))
    # 若x是具体数字,直接判断是否为素数
    else:
        return success if isprime(x) else fail


## 定义逻辑变量
x = var()


## 从指定数字列表中筛选素数
num_list = (12,14,15,19,20,21,22,23,29,30,41,44,52,62,65,85)
prime_in_list = set(run(0, x, (membero, x, num_list), (prime_check, x)))
print("列表中的素数:", prime_in_list)


## 生成前10个素数
first_10_prime = run(10, x, prime_check(x))
print("前10个素数:", first_10_prime)

输出结果

列表中的素数: {19, 23, 29, 41}
前10个素数: (2, 3, 5, 7, 11, 13, 17, 19, 23, 29)

核心逻辑

  1. prime_check 函数是逻辑推理的核心:若输入为逻辑变量,则持续生成素数;若为具体数字,则通过SymPy的isprime函数判断是否为素数;
  2. membero(x, num_list) 表示“x是数字列表中的元素”,结合prime_check(x)实现“筛选列表中的素数”的逻辑。
AI人工智能 逻辑编程的实例
AI人工智能 解决难题
温馨提示
下载编程狮App,免费阅读超1000+编程语言教程
取消
确定
目录

AI人工智能监督学习(回归)

关闭

MIP.setData({ 'pageTheme' : getCookie('pageTheme') || {'day':true, 'night':false}, 'pageFontSize' : getCookie('pageFontSize') || 20 }); MIP.watch('pageTheme', function(newValue){ setCookie('pageTheme', JSON.stringify(newValue)) }); MIP.watch('pageFontSize', function(newValue){ setCookie('pageFontSize', newValue) }); function setCookie(name, value){ var days = 1; var exp = new Date(); exp.setTime(exp.getTime() + days*24*60*60*1000); document.cookie = name + '=' + value + ';expires=' + exp.toUTCString(); } function getCookie(name){ var reg = new RegExp('(^| )' + name + '=([^;]*)(;|$)'); return document.cookie.match(reg) ? JSON.parse(document.cookie.match(reg)[2]) : null; }