Eccomi finalmente arrivato al secondo livello, per questo traguardo è necessario risolvere almeno 50 problemi; è il momento giusto per qualche considerazione su quanto ho fatto finora.
Innanzitutto ho scoperto che in PHP ci sono delle utilissime funzioni (bcadd, bcmul, bcdiv, ...) che permettono di effettuare calcoli con variabili stringa, supportando quindi valori di ogni dimensione e precisione (BC dovrebbe significare Binary Calculator): molti problemi li ho risolti utilizzando questo sistema in quanto i valori da controllare spesso superavano i limite dei 32 bit (unsigned long) e 64 bit (LONGLONG del Visual C).
Sarebbe molto utile avere queste funzioni anche in C (o in C++); se dovesse servire proverò a cercare se c'è già qualcosa in Internet oppure proverò ad implementare qualcosa da me.
Dal punto di vista strettamente matematico, ho riscoperto la figura di Eulero. Non voglio qui sostituirmi a chi ne sa più di me, per questo suggerisco di dare un'occhiata a wikipedia
http://it.wikipedia.org/wiki/EuleroUna delle cose che più mi appassionano di questi problemi è che per ognuno esiste un algoritmo che permette di trovarne la soluzione in meno di un minuto (su un calcolatore di media potenza): ecco allora che si può utilizzare la forza bruta, aspettare anche un'ora per ottenere la risposta, ma poi bisogna comunque studiare il problema per trovare qualcosa di più 'elegante' e veloce.
Mettere in discussione la soluzione più ovvia permette di affinare le proprie conoscenze matematiche e di abituare la mente a ragionare in maniera 'diversa'.
Infine, affrontare questi problemi può aiutare ad imparare nuovi linguaggi: definito l'algoritmo per la soluzione è necessario saperlo tradurre nel linguaggio scelto. Per quanto mi riguarda, alcuni problemi li ho risolti in PHP e mi sono scontrato con alcuni aspetti del linguaggio che non conoscevo proprio bene!