Raczej nie umieszczaj na forum kodów AC. Wyjątkowo w takim wypadku, ale natychmiast po ocenieniu, lub nawet jeżeli nikt tego nie zrobi, po paru dniach koniecznie usuń. Jedną z wad SPOJ'a jest to, że nie daje odpowiedzi i podpowiedzi na temat czystości kodu, a tylko zalicza albo nie. Swoją drogą polecam książkę właśnie o takim tytule ale także dowolną o programowaniu. Także oglądanie, czytanie i rozumienie kodów napisanych przez innych na pewno przyda się w razie takich wątpliwości i problemów.
Co otwoim kodzie myśli SPOJ już wiesz. Co ja myślę ....
- zastąp wszędzie unsigned long long intem
- usuń if(b==0) return 1;
usuń else if((a%10)==5) return 5;
usuń else if((a%10)==6) return 6 na a %= 10;
mógłbyś teraz zrobić if(a==2 || a ==3 ....) ale po co?
właściwie usuń wszystko do pętli, a zostaw tylko trzy odpowiednie linijki.
Czy jeżeli 2 jest liczbą parzystą, to tak samo a nawet dwa razy bardziej parzystą jest też liczba 4?
Czy taka podobna analogia nie występuje tu: b=(b%4)+4, b=(b%2)+2
Jeżeli tak, to czy nie możesz tego zrobić bezwarunkowo, wybierając tylko jedną opcję?
W pętli "powstaną" tak małe potęgi, że możesz zrezygnować z % w środku pętli,
dopiero zwracając potraktuj %
PS
Częściowo pisałem pewnego rodzaju szyfrem, abyś sam trochę pokombinował, ale teraz chyba domyślasz się co myślę o twoim kodzie?