using System.Text.RegularExpressions;
public static void Main(string[] args)
string[] linesArr = numbers.Split('\n');
int[,] numbers2DArr = ConvertStringTo2DArray(linesArr);
for (int i = 0; i < linesArr.Length; i++)
int[] singleC = Regex.Matches(linesArr[i], "[0-9]+").Cast<Match>().Select(m => int.Parse(m.Value)).ToArray();
for (var column = 0; column < singleC.Length; column++)
numbers2DArr[i, column] = singleC[column];
for (var i = 0; i < numbers2DArr.GetLength(0); i++)
for (var j = 0; j < numbers2DArr.GetLength(0); j++)
if (numbers2DArr[i, j] == 0) continue;
if (IsPrime(numbers2DArr[i, j]))
int[,] tempResult = numbers2DArr;
for (int i = numbers2DArr.GetLength(0) - 2; i >= 0; i--)
for (var j = 0; j < numbers2DArr.GetLength(0); j++)
int c = tempResult[i, j];
int a = tempResult[i + 1, j];
int b = tempResult[i + 1, j + 1];
if ((!IsPrime(c) && !IsPrime(a)) || (!IsPrime(c) && !IsPrime(b)))
numbers2DArr[i, j] = c + Math.Max(a, b);
Console.WriteLine(numbers2DArr[0, 0]);
public static bool IsPrime(int number)
for (var i = 3; i * i <= number; i += 2)
public static int[,] ConvertStringTo2DArray(string[] numbers)
int[,] numbers2DArr = new int[numbers.Length, numbers.Length + 1];
for (int row = 0; row < numbers.Length; row++)
string[] singleR = numbers[row].Trim().Split(' ');
for (int column = 0; column < singleR.Length; column++)
int.TryParse(singleR[column], out number);
numbers2DArr[row, column] = number;