Доміно#4469

Доміно (Розбір)

Позначимо через кількість способів покрити прямокутник 2 \times n доміно 2 \times 1. Очевидно, що

Розглянемо алгоритм обчислення :

Таким чином, отримуємо рекурентне співвідношення:

f(n) = f(n - 1) + f(n - 2)

Таким чином, є числом Фібоначчі.

Java реалізація

Оскільки n < 65536, то слід скористатися довгою арифметикою або мовою програмування Java.

import java.util.*;
import java.math.*;

public class Main
{
  public static void main(String[] args) 
  {
    Scanner con = new Scanner(System.in);
    int n = con.nextInt();
    
    BigInteger a = new BigInteger("1"), b = a;
    for(int i = 0; i < n; i++)
    {
      BigInteger temp = a.add(b); 
      a = b;
      b = temp;
    }
    
    System.out.println(a);    
    con.close();
  }
}

Python реалізація

Збільшуємо ліміт до потрібного числа (наприклад, цифр)

import sys
sys.set_int_max_str_digits(100000)

Читаємо вхідне число .

n = int(input())

Обробляємо базові випадки.

if n == 1:
  print(1)
elif n == 2:
  print(2)
else:

Обчислюємо -е число Фібоначчі.

  f1, f2 = 1, 2
  for i in range(n - 2):
    temp = f1 + f2
    f1, f2 = f2, temp

Виводимо відповідь.

  print(f2)