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

Придумайте алгоритм,находящий n-ное простое число, если n< 50

👇
Ответ:
RIF12
RIF12
15.05.2020
Учитывая, что 50 - это очень немного (50-е простое число всего лишь 229), можно придумать всё что угодно (даже ужасающе неэффективное).
Можно просто перебирать все числа, начиная с двойки, и каждое делить на все меньшие его, начиная с двойки. Если хоть на одно разделится - не простое, иначе простое. Попутно подсчитывая число простых чисел, N-е найти не составит труда.

Псевдокод:
ввод N
i = 2
counter = 0
нц
   для j = 2..(i - 1)
      если i mod j = 0 тогда
         увеличить i на 1
         следующая итерация внешнего цикла
      увеличить counter на 1
      если counter = N тогда
         вывод i
         завершение работы программы
   увеличить i на 1
кц

Дальше можно изменять эту программу, оптимизировать. Например, известно, что меньший собственный делитель любого составного числа не превосходит корня из этого числа, следовательно, можно во внутреннем цикле делать перебор не до i - 1, а до [sqrt(i)].
Другое полезное наблюдение может заключаться в том, что все простые числа кроме 2 имеют вид 6m - 1 или 6m + 1 (остальные не подходят: очевидно, 6n делится на 6, 6n +-2 четные числа, а 6n + 3 делится на 3). Это наблюдение позволит примерно в три раза сократить число итераций внешнего цикла.
Наконец, можно сохранять все встретившиеся простые числа в массив, и затем проверять, делится ли текущее число на простые числа, меньшие себя: если не делится, то оно - тоже простое. Для хранения 50 маленьких натуральных чисел в памяти не нужно много места.
Можно воспользоваться каким-нибудь другим алгоритмом, например, решетом Эратосфена. Но в зависимости от того, на каком языке программирования будет потом реализовываться этот алгоритм, он может записываться нетривиально. Для выполнения "на бумажке" решето Эратосфена - один из самых удобных
В конце концов, можно использовать "читерский" метод - взять откуда-нибудь первые 50 простых чисел, записать их куда-нибудь, а потом просто за O(1) находить нужное число в памяти.
4,5(13 оценок)
Открыть все ответы
Ответ:
TyanochkaTyan
TyanochkaTyan
15.05.2020
Паскаль
---
uses crt;
var a: array[1..100,1..100] of integer;
    x,y,sum,k,n:integer;
begin
     write('Введите n: ');
     readln(n);
     clrscr;
     for x:=1 to n do begin
         for y:=1 to n do begin
             a[x,y]:=random(21)-10;
             write(a[x,y]:4);
         end;
         writeln;
     end;
     k:=0;
     Sum:=0;
     for x:=1 to n do
         for y:=x+1 to n do
             if a[x,y]>0 then begin
                Sum:=Sum+a[x,y];
                inc(k);
             end;
     writeln;
     if k<>0 then write(sum/k:4:2);
end.
4,6(76 оценок)
Ответ:
Код для примитивной "рисовалки", рисуете что хотите. Для сохранения на рабочий стол нажимаете клавишу "Enter"

// PascalABC.NET 
// Версия 3.3.5 сборка 1662 (29.04.2018)

uses GraphABC; 

begin 
Window.Title := 'Рисование мышью(Enter - сохранить на раб. стол)'; 
Pen.Color := Color.Red; 
Pen.Width := 3; 
OnMouseDown := (x,y,mb) -> MoveTo(x,y); 
OnMouseMove := (x,y,mb) -> if mb=1 then LineTo(x,y); 
var a:=System.Security.Principal.WindowsIdentity.GetCurrent.Name;
OnKeyDown:=k->if k=13 then begin
SaveWindow('C:\Users\'+copy(a,pos('\',a)+1,a.Length-pos('\',a)+1)+'\Desktop\image.png'); Window.Close; end;
end.
4,4(48 оценок)
Это интересно:
Новые ответы от MOGZ: Информатика
logo
Вход Регистрация
Что ты хочешь узнать?
Спроси Mozg
Открыть лучший ответ