Сдать решение задачи 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 само является интересным.
const
n=4;
Var
f:file of char;
i,j,counter,FileLen:integer;
s:string;
val:char;
ar:array[1..n] of integer;
coms:array[1..n] of integer;
begin
for i:=1 to n do
coms[i]:=i;
assign(f,'input.csv');
reset(f);i:=1; //столбец матрицы
counter:=1; //количество прочитанных элементов
FileLen:=filesize(f); //количество элементов в файле (включая разделители)
read(f,val); //на случай, если первая строка пуста
repeat
while (ord(val)<>10) and (ord(val)<>13) do //каждая строка заканчивается символами 10 и 13, а элементы разделяются ;
begin
if (val<>';') and (ord(val)<>10) and (ord(val)<>13) then
begin
ar[i]+=strtoint(val); //вводим значение из ячейки в переменную суммы read(f,val); //cчитываем следующее значение
inc(counter); //увеличиваем количество прочитанных
end
else
begin
read(f,val); //пропускаем разделитель
inc(counter);
end;
end;
if (ord(val)=10) and (counter<FileLen) then //в конце каждой строки стоят символы с кодами 10 и 13, пропускаем их
begin
read(f,val);
inc(counter);
end;
if (ord(val)=13) and (counter<FileLen) then //когда дошли до конца строки
begin
inc(i);
read(f,val); //читаем с новой строки
inc(counter);
end;
until(counter=FileLen); //читаем пока количество элементов в файле не сравняется с количеством прочитанных
close(f);
for i:=1 to n-1 do //когда лень писать быструю сортировку
for j:=i+1 to n do
if ar[i]<ar[j] then
begin
counter:=ar[i];
ar[i]:=ar[j];
ar[j]:=counter;
counter:=coms[i];
coms[i]:=coms[j];
coms[j]:=counter;
end;
for i:=1 to n do
writeln(i,'st place-',coms[i],' command -',ar[i],' points');
end.