如何将算法重写为 python

How to rewrite an algorithm into python

我是 Python 的新手,想创建一个算法来输出输入的主要因子列表,例如:

Input:   factorise(684)
Output:   2 x 2 x 3 x 3 x 19

或者类似的东西

我需要定义一个素数作为开始,以便算法知道它何时找到了一个素因数,因此遵循以下函数:

num = 13
if num > 1:
   for i in range(2, num//2):
      if (num % i) == 0:
      print(num, "is not a prime number")
      break
      else:
         print(num, "is a prime number")
            else:
            print(num, "is not a prime number")

我将此代码基于另一个问题,将其应用到我的代码中,我遇到的第一个问题是缩进(我认为这是一个快速修复),因为 python 报告了一个错误但正在更改一个级别会产生连锁反应,事实证明在必要时对齐所有内容很乏味

其次,编写此代码是为了生成书面输出而不是定义 - 我希望有人可以帮助我调整开头的行 'print',因为我不确定要使用什么命令。

最后,我需要努力将其组合在一起以创建最终算法 - 如果对如何执行此操作有任何想法,我们将不胜感激,但如果我可以形成此定义,我应该有一个不错的起点可以使用

这将解决您检查数字是否为素数的问题

num = 13
isPrime = True
for i in range(2, num//2):
    if (num % i) == 0:
        isPrime = False
        break
if isPrime:
    print(num, "is a prime number")
else:
    print(num, "is not a prime number")

这是一种更有效的检查数字是否为质数的方法。

def isPrime(num):
    for i in range(2,int(num**0.5)+1):
        if(num%i == 0):
            return False
    return True

如果您需要多次除法来确定一个数是否为素数,您可以尝试其他方法,您的算法不知道什么是素数。只需从除数 2 开始,尝试将您的数字除以这个数。一旦数字不能再除以除数,就增加除数,依此类推,直到除数 == number.

通过这种方式,您无需检查数字是否为质数即可获得质因数分解。

示例:

divisor remaining number prime factors so far
2 684
2 342 2
2 171 2 * 2
3 57 2 * 2 * 3
3 19 2 * 2 * 3 * 3
4 19 2 * 2 * 3 * 3
5 19 2 * 2 * 3 * 3
6 19 2 * 2 * 3 * 3
7 19 2 * 2 * 3 * 3
8 19 2 * 2 * 3 * 3
9 19 2 * 2 * 3 * 3
10 19 2 * 2 * 3 * 3
11 19 2 * 2 * 3 * 3
12 19 2 * 2 * 3 * 3
13 19 2 * 2 * 3 * 3
14 19 2 * 2 * 3 * 3
15 19 2 * 2 * 3 * 3
16 19 2 * 2 * 3 * 3
17 19 2 * 2 * 3 * 3
18 19 2 * 2 * 3 * 3
19 1 2 * 2 * 3 * 3 * 19

输出:2 x 2 x 3 x 3 x 19

P.s。因为当除数达到 sqrt(remaining_number) 时你可以停止增加除数,但计算这个非常昂贵。