Convertir el código de C++ a arduino es lo de menos, lo he puesto así para que pudiérais comprobar rápidamente lo que digo copiando el código en un compilador online. He puesto el ejemplo con números muy pequeños para que veais el funcionamiento, pero la base de número es del orden de 1564557354 y el exponente es un número aleatorio que puede variar entre 1 y 1000. Imaginad el número que sale de la operación 1564557354^1000. Python lo maneja sin problemas, pero en C++ a partir de 1564557354^2 ya no sé hacerlo. Con unsigned long no tengo ni para empezar.
Para vuestra sencillez, aquí tenéis el código en Python para 1564557354^2, listo para ejecutar:
El código en C++. En la primera operación, pow(1564557354, 2), ya da resultados erróneos, y tan sólo he elevado a 2, imaginad si elevo por 1000. Python da 2447839713955481316 mientras que C++ 18446744071562067968: