首页
学习
活动
专区
圈层
工具
发布
首页
学习
活动
专区
圈层
工具
MCP广场
社区首页 >问答首页 >关于gcd的Python数组

关于gcd的Python数组
EN

Stack Overflow用户
提问于 2018-04-07 17:01:42
回答 1查看 213关注 0票数 0

问:,我试过很多种方法,但都没成功。请告诉我一条路。

我试过的最后一条代码;

代码语言:javascript
运行
复制
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矩阵。而产出是;

代码语言:javascript
运行
复制
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来说,你的代码是正确的,但是在我的大学里,我们还没有看到函数。苏我不能用函数。

所以这是正确的密码,

代码语言:javascript
运行
复制
for i in range(n):
    for j in range(n):
        GCD = gcd(i, j)
        if GCD == 1:
            stdio.write("* ")
        else:
            stdio.write(" ")
    stdio.writeln()

我试图在没有函数的情况下修改代码。但不起作用。我的密码

代码语言:javascript
运行
复制
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()

您的输出,你的代码我的输出,我的代码,但是我的代码是错误的。我的代码输出会和你的一样吗?

通常我的欧几里得方法是正确的。但是,当我用这段代码来嵌套时,它就行不通了。

EN

回答 1

Stack Overflow用户

回答已采纳

发布于 2018-04-07 17:05:34

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

代码语言:javascript
运行
复制
from fractions import gcd

如果您想自己实现它,可以使用欧几里得的方法:

代码语言:javascript
运行
复制
def gcd(a, b):
    while b:
        a, b = b, a%b
    return a

要将其放在代码上下文中,请执行以下操作:

代码语言:javascript
运行
复制
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()

如果不想使用任何函数,请记住使用单独的变量,因为函数可能无意中修改这些值:

代码语言:javascript
运行
复制
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()
票数 0
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/49709801

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档