Das Ergebnis von $num % 1000000007
wird für alle Werte kleiner als 1000000007 immer $num
sein. Wenn also alle Werte in @array
im Bereich von 0 bis 50.000 liegen, ist eine solche Berechnung redundant. Sie müssten zwei Schritte durchführen und den *=
-Operator nicht verwenden:
$ans = ($ans % 1000000007) * $_ für @array;
Ein Wort der Vorsicht jedoch. Bei einem nicht primen Modulowert besteht immer die Gefahr, dass Ihre Moduloberechnung null ergibt, was natürlich zur Folge hat, dass die gesamte Multiplikation null produziert. Ich denke, Sie haben bereits daran gedacht, da 1000000007 eine Primzahl zu sein scheint, aber ich möchte es trotzdem erwähnen.
ETA: Wiederverwendung von Zwischenprodukten:
für (@array) {
$ans *= $_;
print "Vor Modulo: $ans\n";
$ans %= 1000000007;
print "Nach Modulo: $ans\n";
}
Beachten Sie, dass Sie die Operatoren hier nicht zusammensetzen müssen.