classSolution {
public:longlong fib_naive(unsignedlonglong n) {
if (n ==0) return0;
if (n ==1) return1;
longlong a =0, b =1;
for (unsignedlonglong i =2; i <= n; ++i) {
longlong nxt = a + b; a = b; b = nxt;
}
return b;
}
};
classSolutionMod {
public:int last_digit(unsignedlonglong n) {
int a =0, b =1;
if (n ==0) return0;
for (unsignedlonglong i =1; i <= n; ++i) {
int nxt = (a + b) %10; a = b; b = nxt;
}
return a %10;
}
};
1
2
3
4
5
6
7
8
9
10
packagemainfuncLastDigitFib(nuint64) int {
a, b:=0, 1ifn==0 { return0 }
fori:= uint64(1); i<=n; i++ {
a, b = b, (a+b) %10 }
returna%10}
1
2
3
4
5
6
7
8
9
10
classSolution {
publicintlastDigit(long n) {
int a = 0, b = 1;
if (n == 0) return 0;
for (long i = 1; i <= n; ++i) {
int nxt = (a + b) % 10; a = b; b = nxt;
}
return a % 10;
}
}
1
2
3
4
5
6
7
8
classSolution {
funlastDigit(n: Long): Int {
var a = 0; var b = 1if (n ==0L) return0for (i in1..n) { val nxt = (a + b) % 10; a = b; b = nxt }
return a % 10 }
}
1
2
3
4
5
6
7
8
classSolution:
deflast_digit(self, n: int) -> int:
a, b =0, 1if n ==0:
return0for _ in range(1, n +1):
a, b = b, (a + b) %10return a %10
1
2
3
4
5
6
7
8
9
10
11
pubstructSolution;
impl Solution {
pubfnlast_digit(mut n: u128) -> u8 {
if n ==0 { return0 }
let (mut a, mut b) = (0u8, 1u8);
for _ in1..=n {
let nxt = (a + b) %10; a = b; b = nxt;
}
a
}
}
For modulus 10 the Pisano period is 60: the sequence of last digits repeats every 60 terms. So F(n) mod 10 = F(n % 60) mod 10. Precompute the first 60 last digits and answer any query in O(1).