Форум » Обработка целых чисел » Вариант 16, №25 (2577). » Ответить

Вариант 16, №25 (2577).

Поляков: Ярослав пишет [quote]Вариант 16, №25 (2577). Здравствуйте, возникла проблема с данной задачей в Паскале (PascalABC.NET), так как диапазон данных чисел очень большой, программа работает очень долго(более 8 минут). Подскажите, пожалуйста, как сократить это время работы. Код: [pre2]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.[/pre2][/quote] Нужно использовать свойства чисел, которые имеют ровно 5 делителей. Посмотрите разбор задачи Р03 на сайте.

Ответов - 1

Alex61: [pre2] ## uses School; Milliseconds; // хронометраж (1820348..2880927) .Select(n -> n.Divizors) .Where(L -> L.Count = 5) .Select(L -> L.TakeLast(2)) .PrintLines; Print('Время:', MillisecondsDelta/1000, 'c') // хронометраж [/pre2] Были получены результаты: [50653,1874161] [68921,2825761] Время: 4.245 c



полная версия страницы