//package worldcodesprint12; import java.io.*; import java.util.*; import java.text.*; import java.math.*; import java.util.regex.*; /** * * link to problem: * https://www.hackerrank.com/contests/world-codesprint-12/challenges/breaking-sticks * * determine the length of the longest sequence of moves you can perform. */ public class BreakingSticks { static boolean debug = false; StringBuilder sb = new StringBuilder(); int n; List nums = new ArrayList<>(); public static void main(String[] args) { new BreakingSticks().solve(); } private void solve() { //input Scanner in = new Scanner(System.in); n = in.nextInt(); for (int i = 0; i < n; i++) { nums.add(in.nextLong()); } //solve //output System.out.print(calc()); } long calc() { long sum = 0; for (Long val : nums) { // System.out.println("val=" + val); List primeFactors = primeFactors(val); // System.out.println(primeFactors); long max = findLongSequenceByBreak(primeFactors, val); // System.out.println("max=" + max); sum += max; } return sum; } private List primeFactors(long val) { List factors = new ArrayList<>(); for (long i = 2; i <= val / i; i++) { while (val % i == 0) { factors.add(i); val /= i; } } if (val > 1) { factors.add(val); } return factors; } private long findLongSequenceByBreak(List primeFactors, long val) { if (val == 1) { //one is not a prime number return 1; } if (primeFactors.isEmpty()) { //its a prime number return val + 1; } long sum = 1; long mult = 1; for (int i = primeFactors.size() - 1; i >= 0; i--) { long factor = primeFactors.get(i); // System.out.println("factor=" + factor); mult *= factor; sum += mult; } return sum; } }