Python 有可能使用素数(而不是素数分解)来找到GCD吗?
我有一个代码挑战,要求我们使用前面的函数创建3个函数。我们使用的是“基本python”,因此没有导入。没有lambdas的版本将是理想的,但两者都是受欢迎的Python 有可能使用素数(而不是素数分解)来找到GCD吗?,python,primes,prime-factoring,greatest-common-divisor,Python,Primes,Prime Factoring,Greatest Common Divisor,我有一个代码挑战,要求我们使用前面的函数创建3个函数。我们使用的是“基本python”,因此没有导入。没有lambdas的版本将是理想的,但两者都是受欢迎的 查找系数功能 is_prime函数-使用find_factors函数 hcf函数-使用is_prime函数 前两个函数返回因子和素数,is_prime函数按照讲师的要求使用find_factors函数 def find_factors(num): factors = [] for i in range(1,num+1):
查找系数
功能is_prime
函数-使用find_factors
函数hcf
函数-使用is_prime
函数is_prime
函数按照讲师的要求使用find_factors
函数
def find_factors(num):
factors = []
for i in range(1,num+1):
if num%i==0:
factors.append(i)
return factors
def is_prime(x):
if x < 2:
return False
else:
for a in (find_factors(x):
if x % a == 0:
return False
return True
甚至可以从正规素数中找到HCF吗?也许我们的指导老师的意思是?
比方说,你的
查找因子
返回一个数字的所有除数。然后,您可以检查x
和y
的所有公约数,并取除数的最大值。从技术上讲,您不需要is_prime
函数
比如说,
如果我们有12和4。让我们先找出这些因素。我们将从find_factors中以排序方式获取它们
12有几个因素:1,2,3,4,6,12
4具有以下因素:1、2、4
可能的解决方案集=[1,2,4](仅限常用解决方案)
GCD或最大公约数仅为两个列表中的最大公约数。因此,答案是4
def find_factors(num):
divs = []
for value in range(1, num + 1):
if num % value == 0:
divs.append(value)
return divs
def hcf(x, y):
divx = find_factors(x)
divy = find_factors(y)
pos_sol = set(divx).intersection(divy)
return max(pos_sol)
print(hcf(56, 12))
更简单的版本:
def find_factors(num):
divs = []
for value in range(1, num + 1):
if num % value == 0:
divs.append(value)
return divs
def is_prime(x):
if x < 2:
return False
else:
for a in range(2,x-1): # technically you can go upto sqrt(n) but if math is allowed
if x % a == 0:
return False
return True
def hcf(x, y):
if is_prime(x) and is_prime(y):
return 1
divx = find_factors(x)
divy = find_factors(y)
pos_sol = [x for x in divx if x in divy]
return max(pos_sol)
print(hcf(4, 12))
def find_因子(num):
divs=[]
对于范围(1,num+1)中的值:
如果num%value==0:
divs.append(值)
返回divs
def是_素数(x):
如果x<2:
返回错误
其他:
对于(2,x-1)范围内的a:#从技术上讲,你可以达到sqrt(n),但如果数学允许的话
如果x%a==0:
返回错误
返回真值
def hcf(x,y):
如果是素数(x)和素数(y):
返回1
divx=查找系数(x)
divy=查找系数(y)
pos_sol=[x表示x在divx中,如果x在divy中]
返回最大值(pos_sol)
印刷品(hcf(4,12))
比方说,您的查找因子
返回一个数字的所有除数。然后,您可以检查x
和y
的所有公约数,并取除数的最大值。从技术上讲,您不需要is_prime
函数
比如说,
如果我们有12和4。让我们先找出这些因素。我们将从find_factors中以排序方式获取它们
12有几个因素:1,2,3,4,6,12
4具有以下因素:1、2、4
可能的解决方案集=[1,2,4](仅限常用解决方案)
GCD或最大公约数仅为两个列表中的最大公约数。因此,答案是4
def find_factors(num):
divs = []
for value in range(1, num + 1):
if num % value == 0:
divs.append(value)
return divs
def hcf(x, y):
divx = find_factors(x)
divy = find_factors(y)
pos_sol = set(divx).intersection(divy)
return max(pos_sol)
print(hcf(56, 12))
更简单的版本:
def find_factors(num):
divs = []
for value in range(1, num + 1):
if num % value == 0:
divs.append(value)
return divs
def is_prime(x):
if x < 2:
return False
else:
for a in range(2,x-1): # technically you can go upto sqrt(n) but if math is allowed
if x % a == 0:
return False
return True
def hcf(x, y):
if is_prime(x) and is_prime(y):
return 1
divx = find_factors(x)
divy = find_factors(y)
pos_sol = [x for x in divx if x in divy]
return max(pos_sol)
print(hcf(4, 12))
def find_因子(num):
divs=[]
对于范围(1,num+1)中的值:
如果num%value==0:
divs.append(值)
返回divs
def是_素数(x):
如果x<2:
返回错误
其他:
对于(2,x-1)范围内的a:#从技术上讲,你可以达到sqrt(n),但如果数学允许的话
如果x%a==0:
返回错误
返回真值
def hcf(x,y):
如果是素数(x)和素数(y):
返回1
divx=查找系数(x)
divy=查找系数(y)
pos_sol=[x表示x在divx中,如果x在divy中]
返回最大值(pos_sol)
印刷品(hcf(4,12))
使用is\u prime并找到hcf的因子
代码
def find_factors(num):
factors = []
for value in range(1, num + 1):
if num % value == 0:
factors.append(value)
return factors
def is_prime(x):
if x < 2:
return False
else:
# prime if only factors are 1 and itself
# i.e. length factors equals 2
return len(find_factors(x))==2
def hcf(a, b):
if a == b:
return a
elif is_prime(a) and is_prime(b):
return 1
# We know factors are in ascending order
# based upon how the list is generated
f_a = find_factors(a)
f_b = find_factors(b)
for num in f_a[::-1]: # go in reverse order
# to get the highestest number first
if num in f_b:
return num # Found if in other list
输出
for a, b in [(5, 15), (2, 3), (24, 8)]:
print(f'For {a} & {b}, hcf = {hcf(a, b)}')
For 5 & 15, hcf = 5
For 2 & 3, hcf = 1
For 24 & 8, hcf = 8
使用is_素数并找到hcf的_因子 代码
def find_factors(num):
factors = []
for value in range(1, num + 1):
if num % value == 0:
factors.append(value)
return factors
def is_prime(x):
if x < 2:
return False
else:
# prime if only factors are 1 and itself
# i.e. length factors equals 2
return len(find_factors(x))==2
def hcf(a, b):
if a == b:
return a
elif is_prime(a) and is_prime(b):
return 1
# We know factors are in ascending order
# based upon how the list is generated
f_a = find_factors(a)
f_b = find_factors(b)
for num in f_a[::-1]: # go in reverse order
# to get the highestest number first
if num in f_b:
return num # Found if in other list
输出
for a, b in [(5, 15), (2, 3), (24, 8)]:
print(f'For {a} & {b}, hcf = {hcf(a, b)}')
For 5 & 15, hcf = 5
For 2 & 3, hcf = 1
For 24 & 8, hcf = 8
对于
查找系数,缩进是否正确。现在它只返回num。它应该返回最小的除数吗?如果是这样的话,这似乎是一个误导性的名字。我不知道为什么这是误导。在find_factors
函数中,我输入12
,它会吐出1,2,3,4,6,12
。所有的缩进似乎都能工作。在您当前的实现中,它甚至不返回数组!即使你修正了缩进,它也会返回第一个除数。我以前在那里有一个打印行,这就是返回的原因。但我把指纹放回去了。我需要它吗?@Edison——扎比尔·阿尔·纳粹主义的评论就是我在之前的评论中提到的。当您没有将项目放入列表时,它怎么能吐出多个值?您的缩进是否正确,以find\u factors
。现在它只返回num。它应该返回最小的除数吗?如果是这样的话,这似乎是一个误导性的名字。我不知道为什么这是误导。在find_factors
函数中,我输入12
,它会吐出1,2,3,4,6,12
。所有的缩进似乎都能工作。在您当前的实现中,它甚至不返回数组!即使你修正了缩进,它也会返回第一个除数。我以前在那里有一个打印行,这就是返回的原因。但我把指纹放回去了。我需要它吗?@Edison——扎比尔·阿尔·纳粹主义的评论就是我在之前的评论中提到的。当你不把项目放入列表时,它怎么能吐出多个值呢?嗨。抱歉,我已经修复了“查找因子”功能。谢谢好的,但是对于我们的挑战,我们应该有三个功能。第三个hcf函数需要使用is_素数函数。gcd与作为一个数素数没有关系,但只有共素数关系。hcf是否必须仅基于Is_primt,或者沿Is_primt可以进行其他检查/循环等?我们可以编写我们想要的任何内容,只要我们有三个函数,并且每个函数都使用前面的函数。我们不能使用导入或高级语法,因为我们还没有讨论它们。只需基于python<代码>查找系数
,是素数
和hcf
。您了解第一个实现吗?你错过了什么?代码还是算法思维方式?@ZabirAlNazi非常感谢你。我明天就会明白的:)嗨。抱歉,我已经修复了“查找因子”功能。Th