Написать программу.
Последовательность Хэмминга образуют натуральные числа, не
имеющие других простых делителей, кроме 2, 3 и 5. Найти первый элемент,
больший данного числа M, а также номер этого элемента в последовательности.
C/C++
Последовательность Хэмминга c++
#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");
}
#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");
}
Похожие вопросы
- Число Хэмминга C++
- Помогите найти ошибку в тесте на последовательности бит C++
- Определить встречается ли в последовательности группа букв 'one', определить последнее вхождение этой группы
- Какие из этих книг вы посоветуете прочесть в первую очередь чтобы повысить свои знания в C/C++?
- Задача по C++
- День добрый \[-_-]/ вопрос по вузовскому программированию на си(C)
- Программирование C++ ПРОШУ ПОМОЧЬ!
- Почему создатель Linux Линус Торвальдс называет C++ ужасным языком, а ядро ОС Linux пишется только на Си?
- Задача на C++ (Остатки).
- Сделать перестановку чисел с помощью функции в C++, но у меня получается чепуха