📅  最后修改于: 2023-12-03 15:37:15.435000             🧑  作者: Mango
给定一个整数 N,输出 N 行,每行由数字 1 到 N 组成,如果一个数字 j 与数字 i 满足 1 ≤ j < i ≤ N,且 j 与 i 互质,则在行 i 和列 j 的交叉处显示字符 X,否则显示字符 0。例如,对于 N=5,输出为:
1 0 X 0 X
0 1 0 0 0
X 0 1 0 X
0 0 0 1 0
X 0 X 0 1
5
1 0 X 0 X
0 1 0 0 0
X 0 1 0 X
0 0 0 1 0
X 0 X 0 1
首先,我们需要实现一个函数来判断两个数是否互质。如果两个数 x 和 y 互质,则它们的最大公约数 gcd(x, y) 等于 1。
def are_coprime(x, y):
for i in range(2, min(x, y) + 1):
if x % i == 0 and y % i == 0:
return False
return True
接下来,我们可以使用双重循环来遍历所有的行和列,对于每个交叉处,如果行列数相同,则输出 1;否则,如果两个数互质,则输出 X;否则,输出 0。
n = int(input())
for i in range(1, n + 1):
for j in range(1, n + 1):
if i == j:
print('1', end=' ')
elif are_coprime(i, j):
print('X', end=' ')
else:
print('0', end=' ')
print()
这样,我们就完成了本题的解答。完整的代码如下所示:
def are_coprime(x, y):
for i in range(2, min(x, y) + 1):
if x % i == 0 and y % i == 0:
return False
return True
n = int(input())
for i in range(1, n + 1):
for j in range(1, n + 1):
if i == j:
print('1', end=' ')
elif are_coprime(i, j):
print('X', end=' ')
else:
print('0', end=' ')
print()