ed oltre all'osservazione di carattere matematico di MItaly, la tendenza da seguire sempre nella scrittura di codice ottimizzato è quella di ridurre al minimo il costo delle operazioni elementari. Qui ci sarebbe da fare un discorso, datasheet del processore alla mano, sul peso (numero cicli) che un'operazione comporta. Ora con le potenze in gioco non è un problema fare qualche migliaio di divisioni modulari e computare un if... ma volendo risparmiare anche su quello:

codice:
public static void main (String[] args) {
        long totalEven = 0;
        
        long start = System.nanoTime();               
        for (int i = 0; i < 10000; i++) {
            if (i % 2 == 0) {
                totalEven += i;
            }
        }
        long end = System.nanoTime();
        System.out.println("Elapsed Time: "+(end-start)+"\nSum: "+totalEven);
        
        totalEven = 0;
        
        start = System.nanoTime();        
        for (int i = 0; i < 10000; i+=2) {
            totalEven+=i;
        }
        end = System.nanoTime();
        System.out.println("\n\nElapsed Time: "+(end-start)+"\nSum: "+totalEven);
}
e come risultato di una prova:
codice:
Elapsed Time: 264192
Sum: 24995000


Elapsed Time: 88703
Sum: 24995000
come vedi c'è un fattore 3 di differenza...