Alors pour accelerer encore ta methode diogene tu peut garder le premier resultat du modulo que tu calcules pour racourcir encore tout le travaille !
Perso je ferais comme ca (en repompant largement tes sources ^^)
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19
| unsigned int kNMod( unsigned int k, unsigned int N, unsigned int mod)
{
// (k^N)mod(mod)
unsigned int periode = 0;
unsigned int Tab[mod-1];
if(mod == 0 || k==0) return 0; // par sécurité
Tab[Periode++] = k % mod;
If (N != 0)
{
while ((N != 0)&&(Tab[Periode-1]!=Tab[0])&&(Periode!=1))
{
k=Tab[Periode]
Tab[Periode++] = k % mod;
N--;
}
N = (N % --Periode)-1;
}
return Tab[N];
} |
Voila c'est plus optimisé ^^
Je ne sais pas si
1 2
| k=Tab[Periode]
Tab[Periode++] = k % mod; |
est equivalent à
Tab[Periode++] = Tab[Periode] % mod;
Partager