import java.io.*; import java.util.*; import java.text.*; import java.math.*; import java.util.regex.*; public class Solution { static long longestSequence(long[] a) { // Return the length of the longest possible sequence of moves. long[] factors; long low; long high; long sumSequence = 0; for(int i=0; i=0; i--) { parts *= factors[i]; sequence += parts; } return sequence; } static long[] findDivisors(long val) { LinkedList divisors = new LinkedList(); long low = 2; long high = val/2 ; while(low <= high && low <= Math.sqrt(val)) { if(val % low == 0) { divisors.add(low); high = val / low; if(val % high == 0 && low != high) divisors.add(high); } low++; } divisors.add(val); long divisors_arr[] = new long[divisors.size()]; ListIterator it = divisors.listIterator(); int i=0; while(it.hasNext()){ divisors_arr[i++] = it.next(); } Arrays.sort(divisors_arr); return divisors_arr; } static long[] findFactors(long val) { long[] divisors = findDivisors(val); boolean[] divisorFlag = new boolean[divisors.length]; Arrays.fill(divisorFlag, true); LinkedList factors = new LinkedList(); ListIterator it; for(int i=0; i