using System.Collections.Generic;
public static List<List<int>> ReadTriangleFromFile(string filePath)
var triangle = new List<List<int>>();
using (var reader = new StreamReader(filePath))
while ((line = reader.ReadLine()) != null)
triangle.Add(line.Split(' ').Select(int.Parse).ToList());
static int[][] ReadPyramidFromFile(string filePath)
List<int[]> pyramidList = new List<int[]>();
string[] lines = File.ReadAllLines(filePath);
foreach (string line in lines)
string[] parts = line.Split(' ');
int[] row = Array.ConvertAll(parts, int.Parse);
int[][] pyramid = pyramidList.ToArray();
public static int MaxSumPathDP(List<List<int>> triangle)
int[, ] dp = new int[n, n];
for (int i = 0; i < n; i++)
dp[n - 1, i] = IsPrime(triangle[n - 1][i]) ? int.MinValue : triangle[n - 1][i];
for (int i = n - 2; i >= 0; i--)
for (int j = 0; j <= i; j++)
int down = IsPrime(triangle[i + 1][j]) ? int.MinValue : dp[i + 1, j];
int diagRight = (j + 1 <= i + 1 && !IsPrime(triangle[i + 1][j + 1])) ? dp[i + 1, j + 1] : int.MinValue;
int diagLeft = (j - 1 >= 0 && !IsPrime(triangle[i + 1][j - 1])) ? dp[i + 1, j - 1] : int.MinValue;
dp[i, j] = triangle[i][j] + Math.Max(down, Math.Max(diagRight, diagLeft));
static int FindMaxSum(int[][] pyramid, int row, int col)
if (row >= pyramid.Length || col < 0 || col >= pyramid[row].Length)
int currentValue = pyramid[row][col];
if (IsPrime(currentValue))
int maxSum = currentValue + Math.Max(Math.Max(FindMaxSum(pyramid, row + 1, col - 1),
FindMaxSum(pyramid, row + 1, col)),
FindMaxSum(pyramid, row + 1, col + 1));
static bool IsPrime(int number)
for (int i = 2; i <= Math.Sqrt(number); i++)
public static void Main()
string filePath = "fileName.txt";
int[][] triangle = ReadPyramidFromFile(filePath);
List<List<int>> triangleDp = ReadTriangleFromFile(filePath);
int maxSumDp = MaxSumPathDP(triangleDp);
Console.WriteLine("Maximum sum of non-prime numbers with dynamic programming: " + maxSumDp);
int maxSum = FindMaxSum(triangle, 0, 0);
Console.WriteLine("Maximum sum of non-prime numbers with recursive(from file): " + maxSum);
int[][] pyramid = new int[][]
int maxSumStatic = FindMaxSum(pyramid, 0, 0);
Console.WriteLine("Maximum sum of non-prime numbers with recursive: " + maxSum);