AI人工智能 查找素数

2026-02-12 14:15 更新

实例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)实现“筛选列表中的素数”的逻辑。
以上内容是否对您有帮助:
在线笔记
App下载
App下载

扫描二维码

下载编程狮App

公众号
微信公众号

编程狮公众号