Python 在本程序中查找最小和最近素数时遇到的问题
我的任务是将每个字母表转换为其ASCII值。然后找到该ASCII值最近的素数并返回字母表。但输出字符串应仅在[a-zA-Z]中 我的代码是:Python 在本程序中查找最小和最近素数时遇到的问题,python,string,list,ascii,Python,String,List,Ascii,我的任务是将每个字母表转换为其ASCII值。然后找到该ASCII值最近的素数并返回字母表。但输出字符串应仅在[a-zA-Z]中 我的代码是: def find_next_prime(n): return find_prime_in_range(n, 2*n) def find_prime_in_range(a, b): for p in range(a, b): for i in range(2, p): if p % i == 0:
def find_next_prime(n):
return find_prime_in_range(n, 2*n)
def find_prime_in_range(a, b):
for p in range(a, b):
for i in range(2, p):
if p % i == 0:
break
else:
return p
return None
67
我得到的输出:
AFREEN
Given : ['A', 'F', 'R', 'E', 'E', 'N']
Ascii Values : [65, 70, 82, 69, 69, 78]
Nearest_primes : [67, 71, 83, 71, 71, 79]
Final output : CGSGGO
AFREEN
Given : ['A', 'F', 'R', 'E', 'E', 'N']
Ascii Values : [65, 70, 82, 69, 69, 78]
Nearest_primes : [67, 71, 83, 67, 67, 79]
Final output : CGSCCO
我想要什么:
AFREEN
Given : ['A', 'F', 'R', 'E', 'E', 'N']
Ascii Values : [65, 70, 82, 69, 69, 78]
Nearest_primes : [67, 71, 83, 71, 71, 79]
Final output : CGSGGO
AFREEN
Given : ['A', 'F', 'R', 'E', 'E', 'N']
Ascii Values : [65, 70, 82, 69, 69, 78]
Nearest_primes : [67, 71, 83, 67, 67, 79]
Final output : CGSCCO
因此,我在获取最小的和最近的素数时遇到了问题
对于数字69,两者都是最近的素数,但我需要最小的。ie67
在这里,我静态地尝试了find\u next\u prime
方法,但这不是正确的方法。我怎样才能做到这一点
AFREEN
Given : ['A', 'F', 'R', 'E', 'E', 'N']
Ascii Values : [65, 70, 82, 69, 69, 78]
Nearest_primes : [67, 71, 83, 67, 67, 79]
Final output : CGSCCO
E有一个最近的素数较低。考虑到这一点。
您必须在下面定义一个范围
def find_next_prime(n):
return find_prime_in_range(n/2, 2*n) # you may go lower if you want
例如:
def find_prime_in_range(a, b):
range_bt_a_b = b-a
for dist in range(range_bt_a_b):
upperElement = a+dist
lowerElement = a-dist
...
你甚至从不考虑67。您的范围迭代从69开始,只会向上更改下面的主要搜索范围
def find_next_prime(n):
return find_prime_in_range(n/2, 2*n) # you may go lower if you want
编辑:
正如注释中所述,这将在
n/2
中找到最低质数。如果你真的需要最接近的素数,你需要测量距离并从中选择最低的素数。试试这个。基本上,您将迭代检查上面和下面的每个值,首先返回较低的值。通过只检查sqrt(a)以及预计算素数值,可以使素数函数更有效
def check_prime(a):
for i in range(2, a):
if a % i == 0:
return False
return True
def find_next_prime(n)
# Not sure if you want this line or not
# if check_prime(n):
# return n
low = n - 1
high = n + 1
while True:
if check_prime(low):
return low
elif check_prime(high):
return high
else:
low -= 1
high += 1
您可以查找下一个和上一个数字,然后选择最接近的数字:
def is_prime(n):
for i in range(2, n):
if n % i == 0:
break
else:
return n
def find_previous_prime(n):
return find_next_prime(n, offset=-1)
def find_next_prime(n, offset = 1):
p = n
while p < 2 * n:
p += 1 * offset
if is_prime(p):
break
return p
p, n = find_previous_prime(69), find_next_prime(69))
print p if 69 - p < n - 69 else n
您正在查找范围
[n,2n]
中的素数,是否也要查找范围[2,n)
中的素数?@abacles不,我需要接近n的素数,以便最终输出仅为字母(a-zA-z),这意味着除了正确的字母以外,没有其他符号,您可以查找[65,n)
和(n,90)
如果是大写或[97,n)
和(n,122)
如果是小写。这是一个黑客问题。…@Shivkumar如果使用此选项,您需要更改查找范围内的素数()
,以便找到最接近n
,而不是n/2