Grazie per l'offerta di aiuto.
In effetti avevo già provato ad attivare le varie "opzioni" da C++11 fino a C++17, ma il problema persisteva.
Mentre aspettavo di vedere se qualche anima buona mi avrebbe aiutato, ho insistito nelle ricerche ed ho trovato questa pagina:
https://stackoverflow.com/questions/6400180/how-to-printf-long-long
%lld is the standard C99 way, but that doesn't work on the compiler that I'm using (mingw32-gcc v4.6.0). The way to do it on this compiler is: %I64d
So try this:
if(e%n==0)printf("%15I64d -> %1.16I64d\n",e, 4*pi);
and
scanf("%I64d", &n);
The only way I know of for doing this in a completely portable way is to use the defines in <inttypes.h>.
In your case, it would look like this:
scanf("%"SCNd64"", &n);
//...
if(e%n==0)printf("%15"PRId64" -> %1.16"PRId64"\n",e, 4*pi);
It really is very ugly... but at least it is portable.
Più avanti altri intervengono tirando in ballo strane interazioni tra la msvcrt.dll e mingw dalle quali pare di capire che sia all'opera una qualche interazione tra procedure non ancor ben uniformate sul compilatore che sto usando. In ogni caso, il "trucchetto" suggerito funziona... chissà però se c'è qualche sistema più "ufficiale"...