SoKnight

Rachiko Chess

Mar 15th, 2022
194
0
Never
Not a member of Pastebin yet? Sign Up, it unlocks many cool features!
Java 2.50 KB | None | 0 0
  1. import java.math.BigInteger;
  2.  
  3. public class Chess {
  4.  
  5.     public static void main(String[] args) {
  6.  
  7.         // штош... по условию у нас есть доска 8 x 8 клеток (64 всего)
  8.         // с первого по последний кол-во зёрнышек на каждой клетке
  9.         // увеличивали в 2 раза начиная с 1
  10.        
  11.         // будем использовать геометрическую прогрессию
  12.         // для оптимизации вычислений
  13.  
  14.         int firstNumber = 1;    // первое число прогрессии
  15.         int quantifier = 2;     // знаменатель прогрессии
  16.  
  17.         int indexFirst = 0;     // индекс первого числа
  18.         int indexLast = 63;     // индекс последнего числа
  19.  
  20.         // да, клеток на доске 64, но, т.к. первое число должно быть
  21.         // равно 1, то начинать отсчёт нужно с 0, т.к. 1 x 2^0 = 1,
  22.         // а уже далее значения будут умножаться на 2 каждый раз
  23.  
  24.         // упакуем знаменатель в BigInteger, т.к. далее часто используется
  25.         BigInteger q = BigInteger.valueOf(quantifier);
  26.  
  27.         // найдём первое и последнее числа в прогрессии с
  28.         // использованием BigInteger, т.к. далее мы будем
  29.         // работать с очень большими числами, чьи значения
  30.         // не вместятся ни в один обычный тип данных
  31.  
  32.         // n2 = n1 * q^63
  33.         BigInteger n1 = BigInteger.valueOf(firstNumber);   // = 1
  34.         BigInteger n2 = n1.multiply(q.pow(indexLast));     // = 1 x 2^63
  35.  
  36.         // по формуле из учебника матеши 9-го класса найдём
  37.         // сумму нужных членов геометрической прогрессии
  38.  
  39.         // sum = (n2 * q - n1) / (q - 1)
  40.         BigInteger sum = n2.multiply(q).subtract(n1).divide(q.subtract(BigInteger.ONE));
  41.  
  42.         // выведем результат
  43.         System.out.println("Первый член прогрессии = " + n1);
  44.         System.out.println("Последний член прогрессии = " + n2);
  45.         System.out.println("Общая сумма = " + sum);
  46.  
  47.     }
  48.  
  49. }
Add Comment
Please, Sign In to add comment