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 - Fatal编程技术网

Python 将数字拆分为其中的素数

Python 将数字拆分为其中的素数,python,string,Python,String,所以我有一个数字列表,看起来像“3723311723”和“13617172343”。如你所见,这些数字可以分成素数,例如“3723311723”可以分成37、23、31等。我如何编写一个python程序,将这样一个数字作为输入,并返回其中的素数列表(按找到它们的顺序) 谢谢。如果你知道这些数字肯定是素数,那么你只需要将字符串分解成长度为2的子字符串,对吗 s = "37233141712331719337" print([int(s[i:i+2]) for i in rang

所以我有一个数字列表,看起来像“3723311723”和“13617172343”。如你所见,这些数字可以分成素数,例如“3723311723”可以分成37、23、31等。我如何编写一个python程序,将这样一个数字作为输入,并返回其中的素数列表(按找到它们的顺序)


谢谢。

如果你知道这些数字肯定是素数,那么你只需要将字符串分解成长度为2的子字符串,对吗

s = "37233141712331719337"
print([int(s[i:i+2]) for i in range(0, len(s), 2)])
输出:

[37, 23, 31, 41, 71, 23, 31, 71, 93, 37]
[37, 23, 31, 41, 71, 23, 31, 7, 19, 3, 37]
True
[37, 23, 31, 41, 17, 71, 23, 31, 17, 71, 19, 37]
编辑:

这将进行递归搜索以查找不重叠的素数。如果没有有效的拆分,则返回False。递归的常见警告适用:如果输入太长,则递归太深,程序将崩溃。但如果存在问题,可以使用堆栈而不是递归

def is_prime(n):
    for k in range(2, n):
            if n % k == 0:
                    return False
    return True
def primesplit(s, i=0):
    if i+1 >= len(s):
        return []
    if i+2 <= len(s):
        two_digits = int(s[i:i+2])
        if is_prime(two_digits):
            remaining_digits = primesplit(s, i+2)
            if isinstance(remaining_digits, list):
                return [two_digits] + remaining_digits
    one_digit = int(s[i:i+1])
    if not is_prime(one_digit):
        return False
    remaining_digits = primesplit(s, i+1)
    if isinstance(remaining_digits, list):
        return [one_digit] + remaining_digits
    return False
s = "37233141712331719337"
result = primesplit(s)
print(result)
print("".join(map(str, result)) == s)

这就是您正在寻找的: 循环按原始数字中出现的顺序查找1位和2位素数,并且不会有重复的素数

In [126]: n
Out[126]: '37233141712331719337'

In [127]: primes = []
     ...: for i in range(len(n)-1):
     ...:     n1 = int(n[i])
     ...:     n2 = int(n[i:i+2])
     ...:     if isPrime(n1):
     ...:         if n1 not in primes:
     ...:             primes.append(n1)
     ...:     if isPrime(n2):
     ...:         if n2 not in primes:
     ...:             primes.append(n2)
     ...:

In [128]: primes
Out[128]: [3, 37, 7, 2, 23, 31, 1, 41, 17, 71, 19]

你的要求有点复杂,但我认为你的意思是: 给定一个数字,查找该数字内的任何两位素数(我假设它们可以重叠) 一个简单的方法是:

def isPrime(number):
    if number>1:
        for i in range(2,number):
            if (number%i)==0:
                return False
        return True
    else:
        return False

    

def getPrimes(number):
    number=str(number)
    retList=[]
    for i in range(len(number)-1):
        temp=int(number[i:i+2])
        if isPrime(temp):
            retList+=[temp]
    return retList
这不会检查单位数素数,但如果需要,可以很容易地添加(只要检查原始数字中的每个数字,如果它们是素数)


这就是您想要的吗?

以下是如何使用模块中的
isprime
方法和
zip

from sympy import isprime

n = "37233141712331719337"
lst = [int(i + j) for i, j in zip(n, n[1:]) if isprime(int(i + j))]
print(lst)
输出:

[37, 23, 31, 41, 71, 23, 31, 71, 93, 37]
[37, 23, 31, 41, 71, 23, 31, 7, 19, 3, 37]
True
[37, 23, 31, 41, 17, 71, 23, 31, 17, 71, 19, 37]

我应该补充一点,我只想找到2位数的素数,这是一个数字或字符串的输入格式?任何更容易处理的东西,你在哪里解决这个问题?我应该说1-2位数的素数,这是我的错。所以它可以从37开始,或者3,然后7,然后23,你需要更精确地描述这个问题。输入中是否有非素数?你怎么处理重叠的素数?例如,“23”可以是[23]、[2,3]或[2,3,23]。“437”可以是[3,7]、[43,3,7]或[43,7]。因此,对于数字“37233141712331719337”,如果可以拆分整个列表,我希望找到将其拆分为素数的所有变体。因此,它将返回372331417123317119337或372323314123317119337或任何其他变体,其中使用整数创建列表,并且每个拆分都是素数。对不起,我很难描述我想要什么。对于重叠的素数,它可能会留下一个具有不同可能性的嵌套列表?也可能有像4这样的非素数,但它们后面总是跟有其他可以构成2位素数的东西(所以如果有4,它后面会跟1、3或7)。这很棘手,你可能会陷入死胡同。一个选项是递归搜索,我将尝试将一些东西组合在一起。如果您可以使用嵌套列表来显示数字,那么它将是[37,[3,7]],而不是3,37,7],这正是我需要的。