#include #include #include #include #include #include #include long int largestPrimeFactor(long int number) { double tmp = 3; double root; while(!(remainder(number,2))) number/=2; if(number == 1) return 2; root = sqrt(number); while(tmp <= root) { if(!(remainder(number,tmp))) { number/=tmp; root = sqrt(number); continue; } tmp += 2; } return number; } long int stick_break(long int size, long int multiplier) { long int divisor; // printf("Size: %ld\nMultiplier: %ld\n", size, multiplier); if(size == 1) return size*multiplier; divisor = largestPrimeFactor(size); // printf("Divisor za %d je %d\n***********\n", size, divisor); return stick_break(size/divisor, multiplier*divisor) + multiplier; } long int longestSequence(int a_size, long int* a) { // Return the length of the longest possible sequence of moves. long int sum = 0; for(int i = 0; i < a_size; i++) { // printf("Test za broj: %d\n", a[i]); sum += stick_break(a[i], 1); // printf("Povecano za: %d\n\n", stick_break(a[i], 1)); } return sum; } 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; }