string[] lines = File.ReadAllLines("input.txt");
int[][] pyramid = new int[rows][];
for (int i = 0; i < rows; i++)
string[] values = lines[i].Split(' ');
pyramid[i] = new int[values.Length];
for (int j = 0; j < values.Length; j++)
pyramid[i][j] = int.Parse(values[j]);
for (int row = rows - 2; row >= 0; row--)
for (int col = 0; col < pyramid[row].Length; col++)
if (IsPrime(pyramid[row][col]))
int down = (row + 1 < rows && col < pyramid[row + 1].Length && !IsPrime(pyramid[row + 1][col])) ? pyramid[row + 1][col] : 0;
int diagonal = (row + 1 < rows && col + 1 < pyramid[row + 1].Length && !IsPrime(pyramid[row + 1][col + 1])) ? pyramid[row + 1][col + 1] : 0;
pyramid[row][col] += Math.Max(down, diagonal);
Console.WriteLine("Maximum sum path: " + pyramid[0][0]);
static bool IsPrime(int number)
if (number <= 1) return false;
for (int i = 2; i <= Math.Sqrt(number); i++)
if (number % i == 0) return false;