Warning: file_get_contents(/data/phpspider/zhask/data//catemap/2/python/358.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_Permutation_Lcm - Fatal编程技术网

Python 找出给定数的可能排列,其乘法给出所需数

Python 找出给定数的可能排列,其乘法给出所需数,python,permutation,lcm,Python,Permutation,Lcm,问题: 以空格分隔的一组数字S作为输入传递。数字N也作为输入传递。程序必须从S中找到两个数字N1,N2,以便N1*N2=N并打印它们 输入格式: S中由空格分隔的一组数字 边界条件: S中的位数小于50 输出格式: N1后接N2,由空格分隔,此处N1>=N2 示例输入/输出1: 输入: 6 8 5 3 9 4 552337 2 1 2 42 输出: 859 643 21 2 说明: Using the digits given 859*643 = 552337. As 859 >

问题: 以空格分隔的一组数字S作为输入传递。数字N也作为输入传递。程序必须从S中找到两个数字N1,N2,以便N1*N2=N并打印它们

输入格式: S中由空格分隔的一组数字

边界条件: S中的位数小于50

输出格式: N1后接N2,由空格分隔,此处N1>=N2

示例输入/输出1:

输入:

6 8 5 3 9 4
552337
2 1 2
42
输出:

859 643
21 2
说明:

Using the digits given 859*643 = 552337. As 859 > 643 it is printed first.
示例输入/输出2:

输入:

6 8 5 3 9 4
552337
2 1 2
42
输出:

859 643
21 2
如果您有任何关于如何执行此操作的想法,我们将不胜感激。

请查看itertools.permutations函数。然后简单地合并字符串,解析为int并将它们相乘,直到找到正确的字符串

或者,您可以将N分解,然后测试这对因子是否包含S中的所有数字

from itertools import permutations
from numpy import sqrt

def permuts(S,N):
    def factorize(N):
        return [ (i, N//i) for i in xrange(1,int(sqrt(N))) if N%i == 0 ]

    factors = factorize(N)
    for i,j in factors:
        for p in permutations(str(i)+str(j)):
            if ' '.join(map(str, p)) == S:
                return j,i
用法:

permuts("2 1 2", 42) -> (21, 2)

未指定可能的倍数的长度。我可能最终会经历从1到50的长度排列。我曾想过这个答案,但我正在寻找一个替代答案。一个好的替代答案,但我将等待一天或两天,看看是否有更好的答案,否则我将标记你的答案。