Warning: file_get_contents(/data/phpspider/zhask/data//catemap/4/string/5.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Python 在本程序中查找最小和最近素数时遇到的问题_Python_String_List_Ascii - Fatal编程技术网

Python 在本程序中查找最小和最近素数时遇到的问题

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:

我的任务是将每个字母表转换为其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:
                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