#include #include #include #include #include #include #include long int longestSequence(int a_size, long int* a) { // Return the length of the longest possible sequence of moves. long int num_moves = 0; for (int i = 0; i < a_size; ++i) { long int peice = a[i]; long int best_move = 0; for (long int num_peices = 2; num_peices <= peice; ++num_peices) { if (peice % num_peices == 0) { long int size = peice / num_peices; if (size == 1 || size % 2 == 0) { long int *new_peices = calloc(num_peices, sizeof(long int)); for (long int j = 0; j < num_peices; ++j) { new_peices[j] = size; } long int move = longestSequence(num_peices, new_peices); if (move > best_move) { best_move = move; } free(new_peices); } } } num_moves += 1 + best_move; } return num_moves; } int main() { int n; scanf("%i", &n); long int *a = malloc(sizeof(long int) * n); for (int a_i = 0; a_i < n; a_i++) { scanf("%li",&a[a_i]); } long int result = longestSequence(n, a); printf("%ld\n", result); return 0; }