关于gcd

时间:2018-04-07 17:01:43

标签: python arrays greatest-common-divisor

Q 我尝试了很多方法,但它没有用。请告诉我一个方法。

我尝试过的最后一段代码;

n = int(sys.argv[1])

x = stdarray.create2D(n,n,0)


for i in range(n):
    for j in range(n):
        if i > j:
            while j != 0:
                z = i % j
                i = j
                j = z
        elif j > i:
            while i != 0:
                z = j % i
                j = i
                i = z
        if i == 1 or j == 1:
            stdio.write("* ")
        else:
            stdio.write(" ")
    stdio.writeln()

我从我的代码中解释一些细节,我使用不同的库而不是正常的。 stdio.writeln就像打印一样。你应该认为它是印刷品......

和stdarray.create bla bla是一个数组。 第一个n表示:行 第二个n代表:列 你可以看到它将是方阵。 (因为它们都是“n”)

我的代码的输出是;如果我在argv中输入5。它将是5x5矩阵。和输出是;

0 1 2 3 4 
1 1 1 3 4
2 1 1 3 4
3 1 1 3 4
4 1 1 3 4

但这是错的。例如,此输出中的2 = 3。 但这是错的。肯定是; 1。 3和2的gcd应该是1.而不是3。

我尝试了很多方法。但我没有解决这个问题。

对于Primusa, 你的代码是正确的,但在我的大学,我们还没有看到功能。 我不能使用函数。

所以这是你的正确代码,

for i in range(n):
    for j in range(n):
        GCD = gcd(i, j)
        if GCD == 1:
            stdio.write("* ")
        else:
            stdio.write(" ")
    stdio.writeln()

我尝试在没有功能的情况下更改该代码。但不起作用。 我的代码,

for x in range(n):
    for y in range(n):
        while y != 0:
            temp = y
            y = x % y
            x = temp
        GCD = x
        if GCD == 1:
            stdio.write("* ")
        else:
            stdio.write(" ")
    stdio.writeln()

你的输出, Your code 我的输出, my code 但我的代码错了。我的代码输出将如何像你的一样?

通常我的欧几里德的方法运作正常。但是当我使用该代码进行嵌套时,它将无法正常工作。

1 个答案:

答案 0 :(得分:0)

你最大的问题似乎是你的gcd实现。 在python中获取gcd的一种简单方法就是导入它:

from fractions import gcd

如果您想自己实施,可以使用Euclid的方法:

def gcd(a, b):
    while b:
        a, b = b, a%b
    return a

将其放在代码的上下文中:

n = int(sys.argv[1])

for row in range(n):
    for col in range(n):
        GCD = gcd(row, col)
        if GCD == 1:
            stdio.write("* ")
        else:
            stdio.write(" ")
stdio.writeln()

如果你想在没有任何功能的情况下这样做,请记住使用单独的变量,因为该功能可能会无意中修改这些值:

for x in range(n):
    for y in range(n):
        a = y
        b = x
        while b:
            a, b = b,a%b
        GCD = a
        if GCD == 1:
            stdio.write("* ")
        else:
            stdio.write("  ") #note outputs weren't lining up so I added an extra whitespace
    stdio.writeln()