Warning: file_get_contents(/data/phpspider/zhask/data//catemap/8/python-3.x/16.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 寻找第n个回文素数-我哪里出错了?_Python_Python 3.x_Algorithm - Fatal编程技术网

Python 寻找第n个回文素数-我哪里出错了?

Python 寻找第n个回文素数-我哪里出错了?,python,python-3.x,algorithm,Python,Python 3.x,Algorithm,给定整数n(1你在测试数字的素数性,是基于它们是否可以被素数列表中的数字整除,但是如果它们是回文的,你只能在素数列表中添加数字。因此,一旦你开始遇到素数因子大于11的复合数,你就会开始错误地识别素数 根据您的函数,symmetricPrime2(12)=323,但323是复合的(17×19).您正在测试数字的素数性,测试的基础是它们是否可以被素数列表中的数字整除,但是如果它们是回文的话,您只能将数字添加到素数中。因此,一旦您开始遇到素数因子大于11的复合数,您将开始识别不正确的素数泰利 根据你的

给定整数n(1你在测试数字的素数性,是基于它们是否可以被
素数列表中的数字整除,但是如果它们是回文的,你只能在
素数列表中添加数字。因此,一旦你开始遇到素数因子大于11的复合数,你就会开始错误地识别素数


根据您的函数,
symmetricPrime2(12)=323
,但323是复合的(17×19).

您正在测试数字的素数性,测试的基础是它们是否可以被
素数列表中的数字整除,但是如果它们是回文的话,您只能将数字添加到
素数中。因此,一旦您开始遇到素数因子大于11的复合数,您将开始识别不正确的素数泰利


根据你的函数,
symmetricPrime2(12)=323,但323是复合的(17×19)。

你的素数测试是错误的,因为你只添加了回文素数

def symmetricPrime2(n,candidate=1):
    primes = []
    counter = 0
    while True:
        i = 0
        prep = 0
        candidate = candidate + 1
        candidate_sr = str(candidate)
        #test if candidate is prime
        for prime in primes:
            if candidate%prime == 0:
                prep += 1
        #test if candidate is palindromic
        candidate_sr_rev = candidate_sr[len(candidate_sr)::-1]

        if prep == 0:
            primes.append(candidate)
            if candidate_sr == candidate_sr_rev:
                counter += 1
        if counter == n:
            return candidate

当您只添加回文素数时,您的素数测试是错误的

def symmetricPrime2(n,candidate=1):
    primes = []
    counter = 0
    while True:
        i = 0
        prep = 0
        candidate = candidate + 1
        candidate_sr = str(candidate)
        #test if candidate is prime
        for prime in primes:
            if candidate%prime == 0:
                prep += 1
        #test if candidate is palindromic
        candidate_sr_rev = candidate_sr[len(candidate_sr)::-1]

        if prep == 0:
            primes.append(candidate)
            if candidate_sr == candidate_sr_rev:
                counter += 1
        if counter == n:
            return candidate

您的代码中有一些地方要么是错误的,要么是可以改进的

  • 您可以使用
    [2,3]
    而不是
    [2]
    初始化素数,这允许您从
    candidate=3
    开始,并将其递增2而不是1,因为2是唯一的偶数素数
  • i=0
    在您的代码中没有意义
  • prep
    仅用于测试
    candidate
    是否为素数。一旦您发现
    candidate%prime
    True
    ,您就可以
    中断
    for循环,如果您已经找到除数,则无需继续测试它
  • 代码中最大的错误是:所有的素数都不是回文的。当然你知道这一点,但这是你写的。从11开始,你只在列表中添加回文的素数(例如,你可以测试并看到13不在
    素数中)。删除
    if
    中的
    和candidate_sr==candidate_sr_rev
    ,以便正确地将素数添加到列表中。由于您需要第n个素数,因此有两个选择:
    • 或者定义第二个列表
      回文素数
      ,将遇到的每个回文素数添加到该列表中,并测试其长度是否等于
      n
    • 或者只保留遇到的回文素数,当该数等于
      n
      时,可以返回该回文素数

    代码中有几点要么是错误的,要么是可以改进的

  • 您可以使用
    [2,3]
    而不是
    [2]
    初始化素数,这允许您从
    candidate=3
    开始,并将其递增2而不是1,因为2是唯一的偶数素数
  • i=0
    在您的代码中没有意义
  • prep
    仅用于测试
    candidate
    是否为素数。一旦您发现
    candidate%prime
    True
    ,您就可以
    中断
    for循环,如果您已经找到除数,则无需继续测试它
  • 代码中最大的错误是:所有的素数都不是回文的。当然你知道这一点,但这是你写的。从11开始,你只在列表中添加回文的素数(例如,你可以测试并看到13不在
    素数中)。删除
    if
    中的
    和candidate_sr==candidate_sr_rev
    ,以便正确地将素数添加到列表中。由于您需要第n个素数,因此有两个选择:
    • 或者定义第二个列表
      回文素数
      ,将遇到的每个回文素数添加到该列表中,并测试其长度是否等于
      n
    • 或者只保留遇到的回文素数,当该数等于
      n
      时,可以返回该回文素数

    你说你不知道你的代码是否错了。你试过测试它的小值n吗?前20个左右的回文素数是在线的,这样你就可以对照它们检查你的代码。你只测试每个候选的回文素数,而不是所有的素数。保留单独的素数和回文列表。你说你不知道您的代码错误。您是否尝试过测试n的小值?前20个左右的回文素数处于联机状态,以便您可以对照它们检查代码。您只针对回文素数而不是所有素数测试每个候选项。保留单独的素数和回文素数列表。