python-3.x - 双素数 Python 程序
问题描述
我需要编写一个 Python 程序来确定给定的整数输入是否是双素数。如果输入数字是双素数,则程序必须输出真。否则,它必须输出假。
请有人指导我如何用 Python 编写这个程序?
这是我到目前为止所做的。我被困在 is_twin_prime 函数部分。
def is_prime(x):
for i in range(2, x):
if x % i == 0:
return False
return True
def is_twin_prime(x):
if is_prime(x) = True:
N = int(input())
for i in range(N):
p = int(input())
if is_twin_prime(p):
print("true")
else:
print("false")
解决方案
基于您试图确定 N 和 p 是否是彼此的孪生素数的假设,我发现您的代码存在以下几个问题:
- is_twin_prime 函数没有 False 返回
- is_prime 函数总是以 2 开头并迭代检查素数,这是非常低效的。
为了提供答案,我从以下关于 twin_primes 的事实开始:
- 两个数都必须是素数
- 绝对(np)== 2
- n 和 p 必须在 [0, 2, 3, 5, 7, 8] 中都有一个个位
为了使双素数的函数测试尽可能高效,我首先消除了不满足最后两种情况的任何数字,并且仅如有必要,我是否生成了一个素数列表。此外,在生成素数时,我只为最大的数字做了一次,因为一旦我有了列表或最大的两个数字都必须在列表中。
为了使搜索素数更有效,我使用了 itertools,尽管如果不使用它,效率会稍低。
import itertools
def erat2():
D = { }
yield 2
for q in itertools.islice(itertools.count(3), 0, None, 2):
p = D.pop(q, None)
if p is None:
D[q*q] = q
yield q
else:
x = p + q
while x in D or not (x&1):
x += p
D[x] = p
def generatePrimes(given_number):
"""
Returns the prime number <= given_number using
an adaptive sieve of estraothenes approach
"""
return list(itertools.islice(erat2(), given_number))
def is_twinPrime(n, p):
accepted_digits = [0, 2, 3, 5, 7, 8]
if abs(n-p) != 2:
return False
elif n%10 not in accepted_digits and p%10 not in accepted_digits:
return False
else:
primes = generatePrimes(max(n, p))
if n in primes and p in primes:
return True
return False
N = int(input("Enter first number"))
P = int(input(Enter second number"))
print(istwinPrime(N, P)
推荐阅读
- php - 在 codeigniter 中使用 $this 时不在对象上下文中
- java - 比较 url 字符串的路径。忽略域名
- javascript - ChartJS:设置图表加载时显示哪些数据并保存(记住)它
- jquery - 在发出请求之前覆盖 ajax 请求以更改 url
- javascript - 如何创建具有函数返回结果的数组?
- vba - 从展开/折叠数据透视表中提取“隐藏”数据 - Excel
- javascript - Lodash:提取属性,拆分数组,获取唯一值
- spring-boot - 如何在 Jhipster-gateway 上为微服务添加不同的速率限制
- java - 如何在后台 2 分钟后调用方法
- node.js - 如何使用nodejs将多个图像转换为单个pdf