Python-关于gcd的数组
Python-array about gcd
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
但这是错误的。例如此输出中的 a2 = 3 。
但这是错误的。肯定是; 1.
3 和 2 的 gcd 应该是 1. 而不是 3.
我尝试了很多方法。但我没有解决这个问题。
对于 Primusa,
你的代码是正确的,但在我的大学里,我们还没有看到功能。
su 我不能使用函数。
所以这是你的正确代码,
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
但我的代码是错误的。我的代码的输出如何与您的一样?
通常我的欧几里德的方法是正确的。但是当我使用该代码进行嵌套时,它将不起作用。
您最大的问题似乎是您的 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()
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
但这是错误的。例如此输出中的 a2 = 3 。 但这是错误的。肯定是; 1. 3 和 2 的 gcd 应该是 1. 而不是 3.
我尝试了很多方法。但我没有解决这个问题。
对于 Primusa, 你的代码是正确的,但在我的大学里,我们还没有看到功能。 su 我不能使用函数。
所以这是你的正确代码,
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 但我的代码是错误的。我的代码的输出如何与您的一样?
通常我的欧几里德的方法是正确的。但是当我使用该代码进行嵌套时,它将不起作用。
您最大的问题似乎是您的 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()