0) non ne sono sicuro, ma credo che vada in errore perchè modifichi valori non consentiti all'interno dell'array. i e j arrivano fino a 518.157, quindi tu vai a modificare v[518.157*518.157].
1) sì, puoi aumentare, ricordati però che l'intero massimo che puoi avere è di 2.147.483.647, se vuoi andare oltre devi utilizzare il long long int che ti tiene numeri fino a 9.223.372.036.854.775.807.
(se vuoi ancora più numeri dichiari la variabile come unsigned, avrà soltanto valori assoluti e ti farà memorizzare il doppio dei numeri).
2) anzichè usare una printf normale esegui una fprintf dentro al file in cui vuoi mettere l'output.