import java.io.File;
import java.io.FileNotFoundException;
import java.util.HashMap;
import java.util.Scanner;
public class main {
static final String inputFileName
= "input.txt"; //input file name which in current directory
static HashMap
<Integer,Boolean
> primeList
= new HashMap
<>(); //create hashmap for keep prime number
public static void main
(String[] args
) {
int line = getTriangleLength();
int arraySize = (line * (line + 1)) / 2;
int[] triangle = new int[arraySize];
int[] dynamicTriangle;
int[] indexTable = new int[line];
fillTriangle(triangle);
dynamicTriangle = triangle.clone();
fillIndexTable(indexTable,line);
int maxSum = findMaxSum(triangle,dynamicTriangle,indexTable,line);
}
static int findMaxSum(int[] triangle,int[] dynamicTriangle,int[] indexTable,int size){
boolean leftChildIsPrime;
boolean rightChildIsPrime;
int leftChild;
int rightChild;
int index;
for (int i = size-1; i > 0 ; i--) {
for (int j = 0; j <i ; j++) {
index =indexTable[i];
leftChild = triangle[index+j];
rightChild = triangle[index+j+1];
leftChildIsPrime = isPrime(leftChild);
rightChildIsPrime = isPrime(rightChild);
if(!(leftChildIsPrime || rightChildIsPrime)){ //both non prime
dynamicTriangle
[index
+j
-i
] = dynamicTriangle
[index
+j
-i
] + Math.
max(dynamicTriangle
[index
+j
],dynamicTriangle
[index
+j
+1]); //update parent on dynamic triangle
}else if(leftChildIsPrime && !rightChildIsPrime){ //only left is prime
dynamicTriangle[index+j-i] = dynamicTriangle[index+j-i] + dynamicTriangle[index+j+1];
}else if(!leftChildIsPrime){ //only right is prime
dynamicTriangle[index+j-i] = dynamicTriangle[index+j-i] + dynamicTriangle[index+j];
}
}
}
return dynamicTriangle[0];
}
static boolean isPrime(int key){
if (primeList.containsKey(key)){
return primeList.get(key);
}
for(int i
=2;i
<=Math.
sqrt(key
);i
++){
if(key%i==0){
return false;
}
}
primeList.put(key,true);
return true;
}
static int getTriangleLength(){
int lineCounter = 0;
try {
Scanner sc = new Scanner(file);
while (sc.hasNextLine()){
lineCounter++;
sc.nextLine();
}
e.printStackTrace();
}
return lineCounter;
}
static void fillTriangle(int[] triangle){
int index=0;
try {
Scanner sc = new Scanner(file);
while (sc.hasNextInt()){
triangle[index] = sc.nextInt();
index++;
}
e.printStackTrace();
}
}
static void fillIndexTable(int[] indexTable,int size){
for (int i = 0; i <size ; i++) {
indexTable[i] = (i*(i+1))/2;
}
}
}
{"html5":"htmlmixed","css":"css","javascript":"javascript","php":"php","python":"python","ruby":"ruby","lua":"text\/x-lua","bash":"text\/x-sh","go":"go","c":"text\/x-csrc","cpp":"text\/x-c++src","diff":"diff","latex":"stex","sql":"sql","xml":"xml","apl":"apl","asterisk":"asterisk","c_loadrunner":"text\/x-csrc","c_mac":"text\/x-csrc","coffeescript":"text\/x-coffeescript","csharp":"text\/x-csharp","d":"d","ecmascript":"javascript","erlang":"erlang","groovy":"text\/x-groovy","haskell":"text\/x-haskell","haxe":"text\/x-haxe","html4strict":"htmlmixed","java":"text\/x-java","java5":"text\/x-java","jquery":"javascript","mirc":"mirc","mysql":"sql","ocaml":"text\/x-ocaml","pascal":"text\/x-pascal","perl":"perl","perl6":"perl","plsql":"sql","properties":"text\/x-properties","q":"text\/x-q","scala":"scala","scheme":"text\/x-scheme","tcl":"text\/x-tcl","vb":"text\/x-vb","verilog":"text\/x-verilog","yaml":"text\/x-yaml","z80":"text\/x-z80"}