美文网首页【python公司校招题】
【python百度】双素数?

【python百度】双素数?

作者: 阿牛02 | 来源:发表于2019-08-07 16:08 被阅读0次

题目:一个正整数是素数当且仅当它除了1和自身以外没有其他因子,现在我们定义双素数;一个正整数是双素数当且仅当它本身是个素数,并且将他的十进制表示反转后得到数不等于它自身且也是个素数,如13就是一个双素数,因为13和31不相等且都是素数,现给出一个整数k,你需要找到第k小的双素数 。

code:

def isPrime2(k):

    # 数理定理:如果一个数不是素数,那么它可以分解成一系列小于它的素数乘积。

    if k <= 2:

        return True

    for i in range(len(prime_array)):

        try:

            if k > prime_array[i] and k % prime_array[i] == 0:

                return False

        except:

            print("error")

    prime_array.append(k)

    return True

def getPrimes2(n):

    primes = []

    for i in range(2, n + 1):

        if isPrime2(i):

            primes.append(i)

    return primes

def swap(str):

    # 字符串的反转

    str = list(str)

    begin = 0

    end = len(str) - 1

    while begin < end:

        tmp = str[begin]

        str[begin] = str[end]

        str[end] = tmp

        begin += 1

        end -= 1

    return ''.join(str)

if __name__ == "__main__":

    prime_array = [2]

    prime_array = getPrimes2(40)

    count = 0

    k = 1

    prime_array1 = []

    for i in range(len(prime_array)):

        if prime_array[i] > 10:

            swi = swap(str(prime_array[i]))

            if int(swi) in prime_array and int(swi) != prime_array[i]:  # 判断反转是否在数组中,并且该反转并不相等

                count += 1

                if count == k:

                    print(prime_array[i])

程序运行结果:

13

相关文章

网友评论

    本文标题:【python百度】双素数?

    本文链接:https://www.haomeiwen.com/subject/emtadctx.html