БлогNot. Является ли натуральное число последовательным?

Является ли натуральное число последовательным?

Для проверки того, может ли натуральное число быть представлено суммой последовательных натуральных чисел (например, 1+2+3+4=10, 5+6+7=18) никаких сумм рядов вычислять не нужно, для двоичных чисел достаточно проверки их битовых свойств. Конечно, следует помнить об INT_MAX, то есть, об ограниченности диапазона представления целых чисел в компьютере. Кроме того, самих чисел суммы мы при таком подходе не увидим.

Всё основано на том, что сумма любых двух последовательных чисел нечётна, при этом, одно из них чётно, а другое нет :) Ну и 2n = 2*2n-1, конечно.

Проверить с выводом самих чисел можно вот здесь в онлайн-сервисе, а ниже - листинг на консольном C++:

#include <iostream>
#include <climits>
using namespace std;

bool checkForSum(long long int n) {
 return ((n&(n-1)) && n);
}

int main() {
 long long int n = 5UL;
 cout << endl << n << ": " << checkForSum(n); //1
 n = 12345678UL+12345679UL+12345680UL;
 cout << endl << n << ": " << checkForSum(n); //1
 n=8192;
 cout << endl << n << ": " << checkForSum(n); //0
 cin.get();
 return 0;
}

05.04.2018, 14:20 [1882 просмотра]


теги: c++ числа алгоритм

К этой статье пока нет комментариев, Ваш будет первым