upload
This commit is contained in:
commit
810a9654a4
50 changed files with 4450 additions and 0 deletions
87
1/I.cpp
Normal file
87
1/I.cpp
Normal file
|
@ -0,0 +1,87 @@
|
|||
#include <iostream>
|
||||
|
||||
int FindNearestNeighbor(unsigned long long number, unsigned long long& power_first, unsigned long long& power_third) {
|
||||
if (number < 5) {
|
||||
power_first = 1;
|
||||
power_third = 1;
|
||||
return 3;
|
||||
}
|
||||
int binary_number[60];
|
||||
int size = 0;
|
||||
bool second_half = false;
|
||||
|
||||
while (number != 0) {
|
||||
binary_number[size] = number % 2ULL;
|
||||
number /= 2;
|
||||
++size;
|
||||
}
|
||||
|
||||
for (int i = size - 1; i >= 0; --i) {
|
||||
if (binary_number[i] == 1 && !second_half) {
|
||||
if (power_first - 2 > size)
|
||||
++power_first;
|
||||
} else if (binary_number[i] == 0) {
|
||||
second_half = true;
|
||||
} else if (binary_number[i] == 1 && second_half) {
|
||||
power_third = i + 1;
|
||||
return size;
|
||||
}
|
||||
}
|
||||
return size;
|
||||
}
|
||||
|
||||
void PrintBinaryNumber(long long number) {
|
||||
int binary_number[60];
|
||||
int size = 0;
|
||||
|
||||
while (number != 0) {
|
||||
binary_number[size] = number % 2ULL;
|
||||
number /= 2;
|
||||
++size;
|
||||
}
|
||||
|
||||
for (int i = size - 1; i >= 0; --i) {
|
||||
std::cout << binary_number[i];
|
||||
}
|
||||
}
|
||||
|
||||
int main() {
|
||||
// unsigned long long start, stop;
|
||||
// std::cin >> start >> stop;
|
||||
unsigned long long start = 1, stop = 100000000000000000;
|
||||
unsigned long long counter = 0;
|
||||
unsigned long long power_first = 0;
|
||||
unsigned long long power_third = 0;
|
||||
unsigned long long number = 0;
|
||||
|
||||
int size = FindNearestNeighbor(start, power_first, power_third);
|
||||
|
||||
while (true) {
|
||||
number = (1ULL << size) - (1ULL << (size - power_first)) + (1ULL << (power_third)) - 1;
|
||||
|
||||
if (number >= start && number <= stop) {
|
||||
PrintBinaryNumber(number);
|
||||
std::cout << " " << number << " " << power_first << " " << power_third << " " << size << std::endl;
|
||||
++counter;
|
||||
}
|
||||
if (number > stop) {
|
||||
std::cout << counter;
|
||||
return 0;
|
||||
}
|
||||
|
||||
|
||||
++power_third;
|
||||
|
||||
if (power_third > size - power_first - 1) {
|
||||
++power_first;
|
||||
power_third = 1;
|
||||
}
|
||||
|
||||
if (power_first >= size - power_third) {
|
||||
++size;
|
||||
power_first = 1;
|
||||
power_third = 1;
|
||||
}
|
||||
|
||||
}
|
||||
}
|
Loading…
Add table
Add a link
Reference in a new issue