|
|
back to boardОх уж этот time limit... Неужели есть какая-то формула по нахождению н-ного элемента без 3-ех вложенных циклов? var a,r: array[1..15001] of integer; b,c,d,i,y:integer; j :boolean; begin d:=2; readln(b); for i:=1 to b do //цикл ввода readln(a[i]); //номера простых чисел y:=0; if y<a[i] then begin for i:=1 to b do //цикл номеров элемента begin while y<=a[i] do //пока количество известных элементов меньше нужного, делать begin c:=2; //минимальный делитель j:=true; while (j<>false) and (c<>d) do //цикл поиска простого число if ((d mod c)=0) then j:=false else inc(c); if j=true then begin r[y+1]:=d; inc(y) end; inc(d); end; end; end; for i:=1 to b do writeln(r[a[i]]); end.
Edited by author 04.02.2016 15:55 Re: Ох уж этот time limit... You should optimize "цикл поиска простого число". For example, if c*c > d then d is definitely prime. Re: Ох уж этот time limit... Spasibo,ya yje vse reshil. var a, r: array[1..15001] of integer; b, c, d, i, y: integer; j: boolean; begin d := 2; r[1]:=2; readln(b); for i := 1 to b do //цикл ввода readln(a[i]); //номера простых чисел y := 0; if y < a[i] then begin for i := 1 to b do //цикл номеров элемента begin while y < a[i] do //пока количество известных элементов меньше нужного, делать begin c := 1; //минимальный делитель j := true; while (j <> false) and (r[c]<>0) and ((d div 2)>=r[c]) do //цикл поиска простого число if ((d mod r[c]) = 0) then j := false else inc(c); if j = true then begin r[y + 1] := d;inc(y) end;inc(d); end; end; end; for i := 1 to b do writeln(r[a[i]]); end. |
|
|