М
Молодежь
К
Компьютеры-и-электроника
Д
Дом-и-сад
С
Стиль-и-уход-за-собой
П
Праздники-и-традиции
Т
Транспорт
П
Путешествия
С
Семейная-жизнь
Ф
Философия-и-религия
Б
Без категории
М
Мир-работы
Х
Хобби-и-рукоделие
И
Искусство-и-развлечения
В
Взаимоотношения
З
Здоровье
К
Кулинария-и-гостеприимство
Ф
Финансы-и-бизнес
П
Питомцы-и-животные
О
Образование
О
Образование-и-коммуникации
axdv
axdv
17.10.2021 23:56 •  Информатика

Сдать решение задачи 5-Интересные числа
Полный : 100
Ограничение времени: 1 с
Ограничение памяти: 512M
Ограничение размера стека: 64M
Задача 5: Интересные числа
На занятиях математического кружка Сережа узнал об интересных числах — это числа, которые имеют простые делители только 2, 3 и 5. Теперь он хочет узнать наибольшее интересное число, не превосходящее числа n.

Входные данные
Программа получает на вход целое число n (2 ≤ n ≤ 1017).

Обратите внимание, что значение n может быть больше, чем возможное значение 32-битной целочисленной переменной, поэтому необходимо использовать 64-битные числа (тип int64 в языке Pascal, тип long long в C и C++, тип long в Java и C#).

Выходные данные
Программа должна вывести одно целое число — максимальное интересное число, не превосходящее n.

Система оценки
Решения, правильно работающие при n ≤ 104, будут оцениваться в

Решения, правильно работающие при n ≤ 108, будут оцениваться в

Примеры
Ввод

Вывод

Пояснение

7

6

Первые интересные числа — это 2, 3, 4, 5, 6, 8, 9, 10, 12, 15, 16, 18, 20, 24, 25, 27, 30,
Поэтому максимальное интересное число, не превосходящее 7 — это 6.

100

100

Число 100 разлагается на множители, как 100 = 22 × 52, поэтому число 100 само является интересным.

👇
Открыть все ответы
Ответ:
nadya5745
nadya5745
17.10.2021
ВАЖНО! Прикрепленные файлы на самом деле не текстовые, а двоичные, но таковые данная система не позволяет прикрепить. Поэтому не стоит пытаться эти файлы читать.

Для работы программы следует переименовать файлы в file1.bin и file2.bin

Содержимое файла f1
7696 163 67
9195 183 71
1922 174 77
4586 173 68
4611 164 64
4204 164 60
8914 178 62
1102 162 63
4947 184 63
6185 174 79

Содержимое файла f2
4611 287 4
1102 312 3
9195 220 12
3142 251 7
8914 229 9
7696 252 7
1922 245 5
4204 273 6
4586 241 10

// PascalABC.NET 3.3, сборка 1573 от 04.11.2017
// Внимание! Если программа не работает, обновите версию!

type
  st1=record
    номер:integer;
    рост:integer;
    вес:integer
  end;
  st2=record
    номер:integer;
    время_бега:integer;
    кол_подтягиваний:integer
  end;
  st3=record
    номер:integer;
    рост:integer;
    вес:integer;
    время_бега:integer;
    кол_подтягиваний:integer
  end;

begin
  // считываем файл f1 в массив типа st1
  var f1:file of st1;
  Assign(f1,'file1.bin'); Reset(f1);
  var n1:=FileSize(f1);
  var m1:=new st1[n1];
  for var i:=0 to n1-1 do Read(f1,m1[i]);
  f1.Close;
  // читаем файл f2 и для каждой записи ищем элемент массива
  // с таким же номером. Если найден - делаем слияние в файл f3
  var f2:file of st2;
  Assign(f2,'file2.bin'); Reset(f2);
  var buf2:st2; // буфер для чтения f2
  var f3:file of st3;
  Assign(f3,'file3.bin'); Rewrite(f3);
  var buf3:st3; // буфер для записи f3
  while not Eof(f2) do begin
    Read(f2,buf2);
    var j:=m1.FindIndex(t->t.номер=buf2.номер);
    if j<>-1 then begin
      buf3.номер:=buf2.номер;
      buf3.рост:=m1[j].рост;
      buf3.вес:=m1[j].вес;
      buf3.время_бега:=buf2.время_бега;
      buf3.кол_подтягиваний:=buf2.кол_подтягиваний;
      Write(f3,buf3)
      end
    end;
  f2.Close;
  // посмотрим, что получилось в f3
  Seek(f3,0);
  while not Eof(f3) do begin
    Read(f3,buf3); Print(buf3)
    end;
  f3.Close
end.

Пример работы программы
(4611,164,64,287,4) (1102,162,63,312,3) (9195,183,71,220,12) (8914,178,62,229,9) (7696,163,67,252,7) (1922,174,77,245,5) (4204,164,60,273,6) (4586,173,68,241,10)
4,7(44 оценок)
Ответ:
3vovo4ka3
3vovo4ka3
17.10.2021

/*Простейшая реализация. Подразумевается, что вводятся корректные данные, n вмещается в int, а a и результат - в double. Визуализация зависимости числа операций умножения от степени n для чисел от 0 до 5000 прилагается */

#include <iostream>

double s_pow(double a, int power)

{

       if (power == 0)

       {

               return 1;

       }

       if (power % 2 == 0)

       {

               return s_pow(a * a, power / 2);

       }

       return a * s_pow(a, power - 1);

}

int main()

{

       double a;

       int n;

       std::cin >> a >> n;

       std::cout << s_pow(a, n);

       return 0;

}


Быстрое возведение в степень Возводить в степень можно гораздо быстрее, чем за n умножений! Для этог
4,7(86 оценок)
Новые ответы от MOGZ: Информатика
logo
Вход Регистрация
Что ты хочешь узнать?
Спроси Mozg
Открыть лучший ответ