Дана табличка n × n, в клетках которой записаны натуральные числа от 1 до 109.
Существует ли путь из клетки (1, 1) в клетку (n, n) такой, что НОД чисел на этом пути больше 1? Перемещаться можно по клеткам только вправо и только вниз. Например, из клетки с координатами (x, y) можно перейти в клетку (x, y + 1) или в клетку (x + 1, y).
Формат ввода
В первой строке вводится n — сторона таблички.
В следующих n строках вводится по n чисел — сама таблица.
Формат вывода
Если путь существует, то выведите 0 при перемещении вправо и 1 при перемещении вниз. Если удовлетворяющих условию путей несколько, то выведите любой подходящий путь.
Если пути не существует, выведите -1.
НА ЛЮБОМ ЯЗЫКЕ
y, x = map(int, input().split()) #Размеры матрицы, если матрицы имеет квадратную форму, то просто y = x = int(input())
matrix = [list(map(int, input().split())) for i in range(y)] #Заполняем матрицу
ans = [sum(matrix[k][i] for k in range(y)) for i in range(x)] #Находим сумму каждого столбца
print(*ans) #Выводим эти суммы
P.S. Комментарии убери, иначе не будет работать
P.S.S. Версия без коментариев и пример работы:
y, x = map(int, input().split())
matrix = [list(map(int, input().split())) for i in range(y)]
ans = [sum(matrix[k][i] for k in range(y)) for i in range(x)]
print(*ans)
Ввод:
3 4 #Размер
3 4 5 6 #Матрица
1 2 3 4
1 1 1 1
Вывод:
5 7 9 11
#include <iostream>
#include <cmath>
using namespace std;
const double EPS = 1e-6; // epsilon - точность вычисления суммы
double MySum( double EPS)
{
double s = 0;// Тут копим сумму
double an; // Тут храним N-ый член ряда
int n; // счётчик
n = 1; // начальное значение n
an = 0; // начальное значение an
do {
an = (2*n-1)/pow(3,n);
s += an; // суммируем очередной член ряда
n++; // переходим к следующему члену
} while (fabs(an) > EPS); // Суммировать будем пока член ряда an не станет достаточно маленьким по модулю
return s; // получившаяся сумма
}
int main()
{
setlocale(LC_ALL, "RUS");
cout <<"Сумма ряда с точностью до " << EPS << "= " << MySum(EPS) << endl;
system("pause");
return 0;
}