Ja Ci podpowiem. Rzeczywiście masz sporo błędów, co nie oznacza, że jesteś głupi, ale przydałoby Ci się trochę lepiej poznać język C++. Może jakaś książka, żeby ugruntować sobie wiedzę? Albo po prostu więcej uwagi, jeśli wiedzę masz. Pierwsze co mi się rzuciło, to w treści zadania masz napisane, że wszystkie dane wejściowe są liczbami całkowitymi. Potem operacje, które na nich wykonujesz dotyczą liczb całkowitych(modulo, dodawanie, mnożenie itp). Wyjścia też są liczbami całkowitymi(cyfra jedności wyniku a^b, gdzie a i b są liczbami całkowitymi dodatnimi). W związku z tym nie należy się spodziewać, by w programie przydały się liczby zmiennoprzecinkowe. Twoje zmienne a i b zadeklarowałeś jako typu double, czyli zmiennoprzecinkowe o podwójnej precyzji, a nie poszerzony zakres int(a przypuszczam, że o to Ci mogło chodzić). Jeśli chodzi o sposób na obliczenie cyfry jedności zauważ, że dla np b=1000000000, instrukcje z pętli będą wykonywały się miliard razy, a limit czasowy wynosi 0.529 sekundy. Nie znam się za bardzo na przełożeniu złożoności obliczeniowej na czas wykonywania, ale już nawet na pierwszy rzut oka taki przypadek śmierdzi baaaardzo długim czasem wykonywania, powyżej 0.529s. Sama idea funkcji nie jest zła. Jeśli chodzi o samo skrócenie czasu wykonywania- gdzieś w temacie wcześniej było poruszone, ale powtórzę podpowiedź: Rozpisz sobie pierwszych 6 potęg liczby 2, zaczynając od 2^1, a kończąc na 2^6 i postaraj się zauważyć powtarzającą się prawidłowość w wyniku w rzędzie jedności. Jeśli nie będziesz w stanie rozwiązać tego zadania po staraniach, prześledź temat, wgryź się w cudze kody i zobaczysz w czym rzecz. Powodzenia:)