C/C++

Последовательность Хэмминга c++

Написать программу.
Последовательность Хэмминга образуют натуральные числа, не
имеющие других простых делителей, кроме 2, 3 и 5. Найти первый элемент,
больший данного числа M, а также номер этого элемента в последовательности.
#include <iostream>
#include <vector>
using namespace std;
template<typename Type>
bool is_prime(Type num) {
bool prime;
if (num <= 5 && (num <= 2 || num == 3 || num == 5)) prime = true;
else if (~num & 1 || 0 == num % 3 || 0 == num % 5) prime = false;
else {
Type n;
for (n = 3; n * n <= num && num % n; n += 2) { ; }
prime = n * n > num? true : false;
}
return prime;
}
int main() {
vector<int> primes;
cout << "M: ";
short m;
cin >> m;
auto flag = false;
auto count = 1;
if (!m) {
puts("Hemming: 1\nNumber: 1");
flag = !flag;
} else if (m > 0) {
auto n = m << 1;
for (auto x = 7; x <= n; x += 2) {
if (is_prime(x)) {
primes.push_back(x);
}
}
for (auto x = 1; x <= n; ++x) {
flag = true;
if (x % 2 && x % 3 && x % 5) continue;
for (auto prime : primes) {
if (0 == x % prime) {
flag = !flag;
break;
}
}
if (flag) {
++count;
if (x > m) {
cout << "Hemming: " << x << "\nNumber: " << count << '\n';
break;
}
}
}
}
if (!flag) puts("Not found!");
system("pause > nul");
}
Сурсков Александр
Сурсков Александр
69 475
Лучший ответ