Вопрос по информатике:
Сегодня в школе на уроке математики проходят делимость. Чтобы
продемонстрировать свойства делимости, учитель выписал на доске все целые числа от 1 до
N в несколько групп, при этом если одно число делится на другое, то они обязательно
оказались в разных группах. Например, если взять N = 10, то получится 4 группы.
Первая группа: 1.
Вторая группа: 2, 7, 9.
Третья группа: 3, 4, 10.
Четвёртая группа: 5, 6, 8.
Вы уже догадались, что, поскольку любое число делится на 1, одна группа всегда
будет состоять только из числа 1, но в остальном подобное разбиение можно выполнить
различными способами. От вас требуется определить минимальное число групп, на которое
можно разбить все числа от 1 до N в соответствии с приведённым выше условием.
Программа получает на вход одно натуральное число N, не превосходящее 109, и
должна вывести одно число – искомое минимальное количество групп.
Пример входных и выходных данных
Ввод Вывод
10 4
Трудности с пониманием предмета? Готовишься к экзаменам, ОГЭ или ЕГЭ?
Воспользуйся формой подбора репетитора и занимайся онлайн. Пробный урок - бесплатно!
- 10.02.2015 18:54
- Информатика
- remove_red_eye 19988
- thumb_up 50
Ответы и объяснения 2
Реализация на Python
--
import datetime
import time
from math import sqrt
UTC = datetime.datetime.utcnow
class MyClass:
def __init__(self, number):
self.number = number
self.res = 0
self.acc = [[1]]
def addToPos(self, pos, i):
self.acc[pos] = self.acc[pos] + [i]
def addToTail(self, i):
self.acc = self.acc + [[i]]
def testPos(self, pos, i):
ret = True
for x in self.acc[pos]:
if i % x == 0:
ret = False
break
return ret
def addCand(self, i):
ret = False
pos = 0
for lst in self.acc:
if self.testPos(pos, i):
ret = True
self.addToPos(pos, i)
break
pos = pos + 1
if not ret:
self.addToTail(i)
def calc(self):
for i in range(2, self.number + 1):
self.addCand(i)
print(self.acc)
print(len(self.acc))
def test(num):
start = UTC()
cl = MyClass(num)
cl.calc()
print (UTC() - start)
if __name__ == '__main__':
test(int(input()))
----
python test.py
9
[[1], [2, 3, 5, 7], [4, 6, 9], [8]]
4
- 11.02.2015 00:05
- thumb_up 4
# Код на ruby 2.2.3p173
a = []
a << [1]
for i in 2..10001
f = 0
a.eachgroup
a << [i] if f == 0
end
p a
p a.size
- 12.02.2015 19:56
- thumb_up 21
Знаете ответ? Поделитесь им!
Есть сомнения?
Не нашли подходящего ответа на вопрос или ответ отсутствует? Воспользуйтесь поиском по сайту, чтобы найти все ответы на похожие вопросы в разделе Информатика.
Трудности с домашними заданиями? Не стесняйтесь попросить о помощи - смело задавайте вопросы!
Информатика — наука о методах и процессах сбора, хранения, обработки, передачи, анализа и оценки информации с применением компьютерных технологий, обеспечивающих возможность её использования для принятия решений.