Div Game
Explicación
Podemos factorizar en primos como . Para lograr el máximo número de operaciones, para cada primo , debemos elegir primero , luego y así sucesivamente.
A medida que factorizamos y hallamos el exponente de cada primo, podemos decrementar el exponente en , luego en , y así sucesivamente, mientras el exponente se mantenga no negativo. Cada vez que decrementamos el exponente, podemos sumar a la respuesta.
Implementación
Complejidad temporal:
#include <iostream>
using namespace std;
int main() {
long long n;
cin >> n;
int ans = 0;
// factorizar n en primos
for (long long p = 2; p * p <= n; p++) {
int exponent = 0;
while (n % p == 0) {
exponent++;
n /= p;
}
// decrementamos el exponente en i cada vez
for (int i = 1; exponent - i >= 0; i++) {
exponent -= i;
ans++;
}
}
if (n > 1) { ans++; }
cout << ans << endl;
}import java.io.*;
import java.util.*;
public class Main {
public static void main(String[] args) {
Kattio io = new Kattio();
long n = io.nextLong();
int ans = 0;
// factorizar n en primos
for (long p = 2; p * p <= n; p++) {
int exponent = 0;
while (n % p == 0) {
exponent++;
n /= p;
}
// decrementamos el exponente en i cada vez
for (int i = 1; exponent - i >= 0; i++) {
exponent -= i;
ans++;
}
}
if (n > 1) { ans++; }
io.println(ans);
io.close();
}
// CodeSnip{Kattio}
}n = int(input())
ans = 0
# factorización prima de n
for p in range(2, int(n**0.5)):
e = 0
while n % p == 0:
n /= p
e += 1
# aquí p^e divide a n
i = 1
# tomamos p^1 luego p^2 y así hasta que e < i
while e >= i:
e -= i
ans += 1
i += 1
ans += n > 1 # si n > 1 entonces es un factor primo con e = 1
print(ans)