Witam.
Mam pewien problem. Chce obliczyć ostatnią cyfrę liczby a poniesionej do potęgi b. Zwykłe potęgowanie było by głupie, więc postanowiłem wykorzystać własności działań modulo. Program działa poprawnie dla większości danych wejściowych jednakże czasem wyniki są błędne. Nie bardzo wiem gdzie tkwi mój błąd.
int mod10(int a, int b){
int wyjs = 0; int c = 1;
while( !(b==1 || a==1 || a==-1 || a==-9 || a==9 || a==0)){
if(b%2){
c *= a % 10;
a = (a * a) % 10;
b /= 2;
} else {
a = (a * a) % 10;
b /= 2;
}
}
if(b==1){
wyjs = (c % 10) * (a % 10) % 10;
} else {
if(b%2){ b=0; } else { b=1; }
switch(a){
case -1: if(b){ wyjs = 1; }else{ wyjs = 9; } break;
case -9: wyjs = 1; break;
case 1: wyjs = 1; break;
case 9: if(b){ wyjs = 1; }else{ wyjs = 9; } break;
case 0: wyjs = 0; break;
}
}
return (c*wyjs)%10;
}