Блог пользователя asroot

Автор asroot, история, 7 лет назад, По-русски

Всем привет !Есть интересная задача ,она проходит у меня 30% ,пожалуйста помогите довести до 100% . Моё решение : https://ideone.com/kFiQNK .

Буду рад если вы скажите каким алгоритмом решать эту задачу ! Сама задача :

Найдите число от 1 до N включительно такое, что в разложении его на простые множители количество множителей максимально. Если таких чисел несколько, выберите максимальное из них.

Например, найдем розложение на простые множнители чисел от 1 до 7. Числа 2, 3, 5 и 7 простые, в их разложении по одному множителю. В разложении числа 1 ноль простых множиителей. В разложении чисел 4 = 2·2 и 6 = 2·З по два простых множителя. Значит, ответом к задаче для N = 7 есть число 6.

Входные данные

В первой строке входного файла находится целое число — количество наборов входных данных. Каждый набор состоит из одного целого числа N (1 ≤N < 231 -1).

Выходные данные

Для каждого отдельного тестового примера выведите одну строку, которая будет содержать одно целое число — наибольшее число от 1 до N, количество простых множителей которого максимально, среди всех чисел от 1 до N.

Лимит времени 1 секунда Лимит использования памяти 64 MiB

Входные данные

1 7

Выходные данные

6

  • Проголосовать: нравится
  • 0
  • Проголосовать: не нравится

»
7 лет назад, # |
Rev. 3   Проголосовать: нравится +7 Проголосовать: не нравится

Очевидно, что ответом всегда будет число вида 2x или 3 * 2x, перебираешь все такие числа и выбираешь максимальное из них, не превышающее N.

  • »
    »
    7 лет назад, # ^ |
      Проголосовать: нравится 0 Проголосовать: не нравится

    Может для данных ограничений это работает, но для общего случая это не верно.

    • »
      »
      »
      7 лет назад, # ^ |
        Проголосовать: нравится 0 Проголосовать: не нравится

      Что неверно?

      • »
        »
        »
        »
        7 лет назад, # ^ |
          Проголосовать: нравится 0 Проголосовать: не нравится

        Не всегда будут эти числа.

        • »
          »
          »
          »
          »
          7 лет назад, # ^ |
            Проголосовать: нравится 0 Проголосовать: не нравится

          Можете привести контрпример?

          • »
            »
            »
            »
            »
            »
            7 лет назад, # ^ |
            Rev. 3   Проголосовать: нравится -13 Проголосовать: не нравится

            144 2 5 3 2 5 1 7 1 13 1

            Вот некоторые примеры. Сначала идет количество делителей потом разложение на простые делители в виде простое число и сколько раз оно встречается

            • »
              »
              »
              »
              »
              »
              »
              7 лет назад, # ^ |
                Проголосовать: нравится 0 Проголосовать: не нравится

              Ты задачу неправильно прочитал

            • »
              »
              »
              »
              »
              »
              »
              7 лет назад, # ^ |
                Проголосовать: нравится 0 Проголосовать: не нравится

              Вы, наверное, неправильно поняли суть задания, надо найти число с максимальным количеством множителей в разложении числа на простые делители, а не с максимальным числом делителей

              • »
                »
                »
                »
                »
                »
                »
                »
                7 лет назад, # ^ |
                  Проголосовать: нравится 0 Проголосовать: не нравится

                я написал перебором 35% проходит

                for(ll i=1;i<=n;i++)
                 {
                
                 	ll cis=pow(2,i);
                 	ll ciss=pow(2,i)*3;
                 	if(cis<=n)
                 	{
                 		maxa=max(cis,maxa);
                 	}
                 	if(ciss<=n)
                 	{
                 		maxa=max(ciss,maxa);
                 	}
                  
                 }
                 cout<<maxa<<endl;
                
                
                • »
                  »
                  »
                  »
                  »
                  »
                  »
                  »
                  »
                  7 лет назад, # ^ |
                  Rev. 3   Проголосовать: нравится 0 Проголосовать: не нравится

                  pow(2,i) лучше заменить на (1<<i), а перебор переменной i надо начинать с нуля

                • »
                  »
                  »
                  »
                  »
                  »
                  »
                  »
                  »
                  7 лет назад, # ^ |
                    Проголосовать: нравится 0 Проголосовать: не нравится

                  rotavirus уже проходит %45.Может где-то надо с оптимизировать или другим алгоритмом ?

                • »
                  »
                  »
                  »
                  »
                  »
                  »
                  »
                  »
                  7 лет назад, # ^ |
                  Rev. 2   Проголосовать: нравится 0 Проголосовать: не нравится

                  В заголовке цикла надо не до n идти, а до 30

  • »
    »
    7 лет назад, # ^ |
      Проголосовать: нравится +5 Проголосовать: не нравится

    Спасибо большое , не заметил .