如何将算法重写为 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)
时你可以停止增加除数,但计算这个非常昂贵。
我是 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)
时你可以停止增加除数,但计算这个非常昂贵。