Algorithmic Toolbox | Week 2
Course Name: Algorithmic Toolbox
Course Link: Algorithmic Toolbox
These are Algorithmic Toolbox Week 2 Programming Assignment Coursera Answers
Programming Assignment: Programming Assignment 2: Algorithmic Warm-up
2-1: Fibonacci Number
def get_nth_fibonacci(n):
if n <= 1:
return n
previous, current = 0, 1
for _ in range(n - 1):
previous, current = current, previous + current
return current
if __name__ == '__main__':
n = int(input())
print(get_nth_fibonacci(n))
2-2: Last Digit of a Large Fibonacci Number
def fibonacci_last_digit(n):
if n <= 1:
return n
n = n % 60
if n <= 1:
return n
previous = 0
current = 1
for _ in range(n - 1):
previous, current = current, (previous + current) % 10
return current
if __name__ == '__main__':
n = int(input())
print(fibonacci_last_digit(n))
These are Algorithmic Toolbox Week 2 Programming Assignment Coursera Answers
2-3: Greatest Common Divisor
def gcd(a, b):
if b == 0:
return a
a_prime = a % b
return gcd(b, a_prime)
if __name__ == '__main__':
a, b = map(int, input().split())
print(gcd(a, b))
2-4: Least Common Multiple
from math import gcd
def lcm(a, b):
"""Calculate the lowest common multiple of 2 int's: a, b using `gcd()`."""
return a * b // gcd(a, b)
if __name__ == '__main__':
a, b = map(int, input().split())
print(lcm(a, b))
These are Algorithmic Toolbox Week 2 Programming Assignment Coursera Answers
2-5: Fibonacci Number Again
def get_pisano_period_length(m):
previous, current = 0, 1
for i in range(m * m):
previous, current = current, (previous + current) % m
# Pisano period always starts with 0, 1
if previous == 0 and current == 1:
return i + 1
def fibonacci_huge_optimized(n, m):
if n <= 1:
return n
pisano_period_length = get_pisano_period_length(m)
n = n % pisano_period_length
if n <= 1:
return n
previous, current = 0, 1
for _ in range(n - 1):
previous, current = current, (previous + current) % m
return current
if __name__ == '__main__':
n, m = map(int, input().split())
print(fibonacci_huge_optimized(n, m))
These are Algorithmic Toolbox Week 2 Programming Assignment Coursera Answers
2-6: Last Digit of the Sum of Fibonacci Numbers
def get_pisano_period_length(m):
previous, current = 0, 1
for i in range(m * m):
previous, current = current, (previous + current) % m
if previous == 0 and current == 1:
return i + 1
def fibonacci_huge(n, m):
if n <= 1:
return n
pisano_period_length = get_pisano_period_length(m)
n = n % pisano_period_length
previous, current = 0, 1
for _ in range(n - 1):
previous, current = current, previous + current
return current % m
def fibonacci_sum(n):
if n <= 1:
return n
# Sum of first n Fibonacci numbers is F(n+2) - 1
n_plus_2_fib = fibonacci_huge(n + 2, 10)
sum_fib = n_plus_2_fib - 1
# Since we are interested in the last digit
return sum_fib % 10
if __name__ == '__main__':
n = int(input())
print(fibonacci_sum(n))
These are Algorithmic Toolbox Week 2 Programming Assignment Coursera Answers
2-7: Last Digit of the Sum of Fibonacci Numbers Again
import sys
def get_pisano_period_length(m):
previous, current = 0, 1
for i in range(m * m):
previous, current = current, (previous + current) % m
if previous == 0 and current == 1:
return i + 1
def fibonacci_huge(n, m):
if n <= 1:
return n
pisano_period_length = get_pisano_period_length(m)
n = n % pisano_period_length
if n <= 1:
return n
previous, current = 0, 1
for _ in range(n - 1):
previous, current = current, (previous + current) % m
return current
def fibonacci_partial_sum(from_, to):
if to < from_:
return 0
sum_to = (fibonacci_huge(to + 2, 10) - 1) % 10
sum_from = (fibonacci_huge(from_ + 1, 10) - 1) % 10
result = sum_to - sum_from
if result < 0:
result += 10
return result
if __name__ == '__main__':
input = sys.stdin.read()
from_, to = map(int, input.split())
print(fibonacci_partial_sum(from_, to))
These are Algorithmic Toolbox Week 2 Programming Assignment Coursera Answers
2-8: Last Digit of the Sum of Squares of Fibonacci Numbers
def get_pisano_period_length(m):
previous, current = 0, 1
for i in range(m * m):
previous, current = current, (previous + current) % m
if previous == 0 and current == 1:
return i + 1
def fibonacci_huge(n, m):
if n <= 1:
return n
pisano_period_length = get_pisano_period_length(m)
n = n % pisano_period_length
if n <= 1:
return n
previous, current = 0, 1
for _ in range(n - 1):
previous, current = current, (previous + current) % m
return current
def fibonacci_sum_squares(n):
if n <= 1:
return n
fn = fibonacci_huge(n, 10)
fn_plus_1 = fibonacci_huge(n + 1, 10)
return (fn * fn_plus_1) % 10
if __name__ == '__main__':
n = int(input())
print(fibonacci_sum_squares(n))
These are Algorithmic Toolbox Week 2 Programming Assignment Coursera Answers
More Weeks of the course: Click Here
More Coursera courses: https://progiez.com/coursera
