profile
Размещено 4 года назад по предмету Информатика от mike45388

Сегодня в школе на уроке математики проходят делимость. Чтобы
продемонстрировать свойства делимости, учитель выписал на доске все целые числа от 1 до
N в несколько групп, при этом если одно число делится на другое, то они обязательно
оказались в разных группах. Например, если взять N = 10, то получится 4 группы.
Первая группа: 1.
Вторая группа: 2, 7, 9.
Третья группа: 3, 4, 10.
Четвёртая группа: 5, 6, 8.
Вы уже догадались, что, поскольку любое число делится на 1, одна группа всегда
будет состоять только из числа 1, но в остальном подобное разбиение можно выполнить
различными способами. От вас требуется определить минимальное число групп, на которое
можно разбить все числа от 1 до N в соответствии с приведённым выше условием.
Программа получает на вход одно натуральное число N, не превосходящее 109, и
должна вывести одно число – искомое минимальное количество групп.
Пример входных и выходных данных
Ввод Вывод
10 4

  1. Ответ на вопрос
    Ответ на вопрос дан hambis
    Реализация на 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

  2. Ответ на вопрос
    Ответ на вопрос дан Aillianna
    # Код на ruby 2.2.3p173
    a = []
    a << [1]

    for i in 2..10001
        f = 0
        a.each{ |group|
            m = 1
            group.each { |c|
                m *= i % c
            }
            f += m
            if m > 0
                group << i
                break
            end
        }
        a << [i] if f == 0
    end

    p a
    p a.size
Не тот ответ на вопрос, который вам нужен?
Найди верный ответ
Самые новые вопросы
tegysigalpa2012
Русский язык - 5 лет назад

Помогите решить тест по русскому языку тест по русскому языку «местоимение. разряды местоимений» для 6 класса 1. укажите личное местоимение: 1) некто 2) вас 3) ни с кем 4) собой 2. укажите относительное местоимение: 1) кто-либо 2) некоторый 3) кто 4) нам 3. укажите вопросительное местоимение: 1) кем-нибудь 2) кем 3) себе 4) никакой 4. укажите определительное местоимение: 1) наш 2) который 3) некий 4) каждый 5. укажите возвратное местоимение: 1) свой 2) чей 3) сам 4) себя 6. найдите указательное местоимение: 1) твой 2) какой 3) тот 4) их 7. найдите притяжательное местоимение: 1) самый 2) моего 3) иной 4) ничей 8. укажите неопределённое местоимение: 1) весь 2) какой-нибудь 3) любой 4) этот 9. укажите вопросительное местоимение: 1) сколько 2) кое-что 3) она 4) нами 10. в каком варианте ответа выделенное слово является притяжательным местоимением? 1) увидел их 2) её нет дома 3) её тетрадь 4) их не спросили

Информация

Посетители, находящиеся в группе Гости, не могут оставлять комментарии к данной публикации.