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

Найдите наименьшее k, такое что k! делится на n без остатка. k! =1*2**(k-1)*k форма входа данных : в первой и единственной строке дано число n (1= формат выходных данных: выведите наименьшее число k факториал которого делится на n. примеры a.in = 4 a.out = 4 a.in = 8 a.out = 4

👇
Ответ:
bistreeee
bistreeee
29.10.2020
Навскидку можно сделать так: вместо самих чисел хранить их разложения на простые множители. Например, вместо N=84=2^2*3^1*5^0*7^1*11^0... будет массив Na=(2, 1, 0, 1, 0, 0,...). Еще такой же массив отводишь под сами простые числа. После получения разложения N начинается цикл: берем очередное число i и из Na вычитаем его разложение (пробегаемся по простым числам, если i делится, то делим и вычитаем 1 в соотв. элементе массива, пробуем снова). Цикл заканчивается, когда все элементы Na отрицательны или равны 0, это значит, что факториал последнего i содержит все простые числа в степени не меньшей чем N, т.е. i! делится на N.
Проблема в том, что непонятно, каких размеров должен быть массив. Есть ли ограничения на N? Например, если N всегда не больше 10000, то количество простых чисел и сами числа можно константами загнать и т.д. Распиши условия, тогда попробую примерно код написать.
4,5(64 оценок)
Открыть все ответы
Ответ:
polinaasya
polinaasya
29.10.2020
Type
    LinMass = array [1..1000] of Integer;

var
    A: LinMass;
    N, i, j: Integer;

begin
    Write('Количество элементов массива: ');
    ReadLn(N);
    for I := 1 To N Do
    begin
        Write('Введите A[', I, '] ');ReadLn(A[i]);
    end;
    
    i := 1;
    while (i <= n) do
        if (A[i] >= 100) and (A[i] <= 999) and (A[i] mod 2 = 0) and (A[i] mod i = 0) then begin
            for j := i + 1 to n do
                A[j - 1] := A[j];
            n := n - 1
        end
        else i := i + 1;
    
    for I := 1 To N Do
        write(a[i]:6);
end.
4,7(54 оценок)
Ответ:
kirillsmex13p07s3r
kirillsmex13p07s3r
29.10.2020
Var
    A: array [1..100] of Integer;
    N, i, j, k: Integer;

begin
    Write('Количество элементов массива: ');
    ReadLn(N);
    k := 0;
    
    for i := 1 To N Do
    begin
        Write('A[', I, '] = ');
        ReadLn(A[i]);
        {A[i] := Random(100) - 50;
        write(A[i], ' ');}
        if A[i] < 0 then k := i;
    end;
    writeln;
    
    {фильтр, если нет отрицательных}
    if k = 0 then begin
        write('Отрицательных элементов нет');
        halt;
    end;
    
    writeln('Удаление отрицательных элементов');
    k := 1;
    while (n > 0) and (k <= n) do
    begin
        if A[k] < 0 then begin
            for i := k to n - 1 do
                A[i] := A[i + 1];
            n := n - 1;
        end
        else k := k + 1;
    end;
    
    for i := 1 To N Do
        write(A[i], ' ');
end.

а вообще правильнее создать еще один массив и переписать туда нужные элементы - куда меньше операций, циклов и затрат памяти. Массив не предназначен для "удаления" элементов в нем
4,6(84 оценок)
Это интересно:
Новые ответы от MOGZ: Информатика
logo
Вход Регистрация
Что ты хочешь узнать?
Спроси Mozg
Открыть лучший ответ