Beispiel #1
0
def test_calc_fib(n, fib_last_digit):
    assert get_fibonacci_last_digit(n) == fib_last_digit
 def test_200(self):
     self.assertEqual(1, get_fibonacci_last_digit(200))
 def test_64(self):
     self.assertEqual(2, get_fibonacci_last_digit(64))
 def test_100(self):
     self.assertEqual(6, get_fibonacci_last_digit(100))
 def test_150(self):
     self.assertEqual(9, get_fibonacci_last_digit(150))
 def test_with_preceeding_lower_bound(self):
     get_fibonacci_last_digit(-1)
def test_get_fibonacci_last_digit(n, expected):
    assert get_fibonacci_last_digit(n) == expected
 def test_with_n_as_327305(self):
     self.assertEqual(5, get_fibonacci_last_digit(327305))
 def test_with_n_as_10000000(self):
     self.assertEqual(5, get_fibonacci_last_digit(10000000))
 def test_with_n_as_9(self):
     self.assertEqual(4, get_fibonacci_last_digit(9))
 def test_with_n_as_30(self):
     self.assertEqual(0, get_fibonacci_last_digit(30))
 def test_with_n_as_8(self):
     self.assertEqual(1, get_fibonacci_last_digit(8))
 def test_with_n_as_7(self):
     self.assertEqual(3, get_fibonacci_last_digit(7))
 def test_with_n_as_6(self):
     self.assertEqual(8, get_fibonacci_last_digit(6))
 def test_with_n_as_3(self):
     self.assertEqual(2, get_fibonacci_last_digit(3))
Beispiel #16
0
    if n <= 1: return n

    previous = 0
    current = 1
    period = []
    period.append(previous)
    period.append(current)
    tmp = []
    for _ in range(n - 1):
        previous, current = current, (previous + current) % m

        if len(period) > 0 and period[len(tmp)] == current:
            tmp.append(current)
            if len(period) == len(tmp): break
        else:
            if len(tmp) > 0:
                period.extend(tmp)  #O(m)?
                tmp.clear()
            period.append(current)

    return period[n % len(period)]


if __name__ == '__main__':
    input = sys.stdin.read()
    n, m = map(int, input.split())

    for i in range(n):
        assert (get_fibonacci_last_digit(i, m) == get_fibonacci_huge(i, m))

    print(get_fibonacci_huge(n, m))