Другие языки программирования и технологии
Последовательность Хэмминга образуют натуральные числа,
не имеющие других простых делителей кроме 2,3и5. Найти: а) первые N элементов этой последовательности; б) сумму первых N элементнов; в) первый элемент больший данного числа M, а так же номер этого элемента в послед. г) сумму всех элементов с номера N по номер M
Это известная задача.. .
Короче, понятно, что все элементы последовательности имеют вид:
2^i*3^j*5^k
Первым элементом принято считать 1, хоть оно и не попадает ни под какие критерии.
Элементы вычистяются так:
1
1*2 1*3 1*5 = 2 3 5
2*2 2*3 2*5 = 4 6 10
3*2 3*3 3*5 = 6 9 15
5*2 5*3 5*5 = 10 15 25
4*2 4*3 4*5 = 8 12 20
....
Аккуратно сложив это без повторений получаем:
1 2 3 4 5 6 8 9 10 12 15 (16) (18) 20 (24) 25 ...
То, что в скобках, мы бы получили на последующих шагах.
Если это реализовывать в таком виде, программка получится нетривиальная.. . Я бы делал рекурентную функцию, которая бы засовывала найденные значения в сбалансированное бинарное дерево без повторений (или в hash table если есть нормальная реализация) , пока количество элементов в дереве не превысит искомое Н.. . Тут меня кое-что смущает, а именно - эти "забегания назад" элементов, над этим надо подумать.. . Дальше из дерева засунуть в массив не штука и все остальное - дело техники.
Другой вариант - гоним цикл, ищем простые числа от 7 до к пополам по известному алгоритму поиска простых чисел и проверяем, что:
наше к не делится на эти числа и одно из трех:
к четное
к оканчивается на 5
к делится на 3
В общем, дерзай.. . Ничего заданьице такое.
Короче, понятно, что все элементы последовательности имеют вид:
2^i*3^j*5^k
Первым элементом принято считать 1, хоть оно и не попадает ни под какие критерии.
Элементы вычистяются так:
1
1*2 1*3 1*5 = 2 3 5
2*2 2*3 2*5 = 4 6 10
3*2 3*3 3*5 = 6 9 15
5*2 5*3 5*5 = 10 15 25
4*2 4*3 4*5 = 8 12 20
....
Аккуратно сложив это без повторений получаем:
1 2 3 4 5 6 8 9 10 12 15 (16) (18) 20 (24) 25 ...
То, что в скобках, мы бы получили на последующих шагах.
Если это реализовывать в таком виде, программка получится нетривиальная.. . Я бы делал рекурентную функцию, которая бы засовывала найденные значения в сбалансированное бинарное дерево без повторений (или в hash table если есть нормальная реализация) , пока количество элементов в дереве не превысит искомое Н.. . Тут меня кое-что смущает, а именно - эти "забегания назад" элементов, над этим надо подумать.. . Дальше из дерева засунуть в массив не штука и все остальное - дело техники.
Другой вариант - гоним цикл, ищем простые числа от 7 до к пополам по известному алгоритму поиска простых чисел и проверяем, что:
наше к не делится на эти числа и одно из трех:
к четное
к оканчивается на 5
к делится на 3
В общем, дерзай.. . Ничего заданьице такое.
Похожие вопросы
- Даны натуральные числа N и A1,…, AN. Образовать новые одномерные последовательности B1, …, BN и C1, …, CN
- ПОЖАЛУЙСТА!!!!Напишите программу для вычисления суммы 10 натуральных чисел последовательностью 1+2+4+8+..в Pascal
- Вводится последовательность чисел, 0 – конец последовательности. Найти два наибольших числа (VB) прошу помощи
- Требуется написать программу, которая из цифр двух натуральных чисел создает наименьшее возможное число, сохраняя при эт
- 1. Получить сумму двух длинных натуральных чисел.
- как решить через abc pascal задачу "Дано натуральное число n. Получить все простые делители этого числа"
- Дано натуральное число n и вещественная матрица размера n X 9 . Плиз помогите(
- Паскаль. Представить натуральное число n в виде суммы трёх квадратов натуральных чисел.
- Паскаль. Дано натуральное число. Верно ли , что цифра А встречается в нем более К раз.
- Данная последовательность из n целых чисел. Найти номер максимального элемента в этой последовательности. Новинка!