Автор | Сообщение |
|
| Администратор
|
Сообщение: 2648
|
|
Отправлено: 31.03.21 17:49. Заголовок: Вариант 16, №25 (2577).
Ярослав пишет цитата: | Вариант 16, №25 (2577). Здравствуйте, возникла проблема с данной задачей в Паскале (PascalABC.NET), так как диапазон данных чисел очень большой, программа работает очень долго(более 8 минут). Подскажите, пожалуйста, как сократить это время работы. Код: var b:array [1..1060579] of integer; i,j,k,x,y:integer; begin for i:= 1820348 to 2880927 do begin k:=0; for j:= 2 to (i div 2) do begin if (i mod j = 0) then k:=k+1; if (k > 3) then break; end; if (k = 3) then begin x:=x+1; b[x]:= i; end; end; for y:=1 to x do begin write(b[y]); for i:=1 to (b[y] div 2) do begin if (b[y] mod i = 0) then write(i,\' \'); end; writeln(\'\'); end; end. |
| Нужно использовать свойства чисел, которые имеют ровно 5 делителей. Посмотрите разбор задачи Р03 на сайте.
|
|
|
Ответов - 1
[только новые]
|
|
|
Отправлено: 02.04.21 13:00. Заголовок: ``` ## u..
## uses School; Milliseconds; // хронометраж (1820348..2880927) .Select(n -> n.Divizors) .Where(L -> L.Count = 5) .Select(L -> L.TakeLast(2)) .PrintLines; Print('Время:', MillisecondsDelta/1000, 'c') // хронометраж Были получены результаты: [50653,1874161] [68921,2825761] Время: 4.245 c
|
|
|