当我给予输入为17,19:我只得到17,19,2,但我希望所有小于19的数字都作为输出。因为我们处理的是素数,我们应该得到1作为GCD。
这是我的代码:
a=[]
n=int(input("Number of elements in array:"))
for i in range(0,n):
print(f"Enter number {i+1}: ")
l=int(input())
a.append(l)
print(a)
for j in range(len(a)):
for k in range(len(a)):
diff = abs(a[j] - a[k])
if diff > 0 and diff not in a:
a.append(diff)
print (f"The final numbers are: {a}")
1条答案
按热度按时间2izufjch1#
这里有几个问题。
第一个
len(a)
输入计算一次。如果将新元素追加到,则在进一步计算时将不会考虑这些元素。但是,您希望计算进一步的差异。
第二,你应该读一下欧几里得算法,因为它并不像你描述的那样工作(例如维基百科也包含了它的伪代码实现)。对于基于差的版本(也有基于除法的版本),你总是用它们的差来替换两个值中的较大值:(19,17)-〉(17,2)-〉(15,2)-〉... -〉(3,2)-〉(2,1)-〉(1,1),因此GCD为1。
因此,您要查找的序列应该是19、17、2、15、13、11、9、7、5、3、1。
同样,如果你想重新创建该算法,也不需要询问数组的元素数,因为它总是需要2个元素。