bài 1 lập cái sàng nguyên tố xong rồi dùng đệ quy cũng được (mình cũng không rành về quy hoạch động)

đoạn này của bạn lehang_gb1:
For i:=2 to N div 2 do
if SNT(i) then
Begin
j:=j+1;
A[j]:=i;
End;
nên thay bằng cái này:

Mã nguồn PHP:
[COLOR=#000000]
procedure Eratosthenes[/COLOR][COLOR=#007700];var[/COLOR][COLOR=#0000BB]i[/COLOR][COLOR=#007700],[/COLOR][COLOR=#0000BB]j[/COLOR][COLOR=#007700]: [/COLOR][COLOR=#0000BB]longint[/COLOR][COLOR=#007700];[/COLOR][COLOR=#0000BB]prime[/COLOR][COLOR=#007700]: array[[/COLOR][COLOR=#0000BB]1..10000[/COLOR][COLOR=#007700]] [/COLOR][COLOR=#0000BB]of boolean[/COLOR][COLOR=#007700];[/COLOR][COLOR=#0000BB]begin fillchar[/COLOR][COLOR=#007700]([/COLOR][COLOR=#0000BB]prime[/COLOR][COLOR=#007700],[/COLOR][COLOR=#0000BB]sizeof[/COLOR][COLOR=#007700]([/COLOR][COLOR=#0000BB]prime[/COLOR][COLOR=#007700]),[/COLOR][COLOR=#0000BB]true[/COLOR][COLOR=#007700]); [/COLOR][COLOR=#0000BB]prime[/COLOR][COLOR=#007700][[/COLOR][COLOR=#0000BB]1[/COLOR][COLOR=#007700]]:=[/COLOR][COLOR=#0000BB]false[/COLOR][COLOR=#007700]; [/COLOR][COLOR=#0000BB]i[/COLOR][COLOR=#007700]:=[/COLOR][COLOR=#0000BB]2[/COLOR][COLOR=#007700]; while [/COLOR][COLOR=#0000BB]i[/COLOR][COLOR=#007700]*[/COLOR][COLOR=#0000BB]i[/COLOR][COLOR=#007700]<=[/COLOR][COLOR=#0000BB]n [/COLOR][COLOR=#007700]do [/COLOR][COLOR=#0000BB]begin [/COLOR][COLOR=#007700]if [/COLOR][COLOR=#0000BB]prime[/COLOR][COLOR=#007700][[/COLOR][COLOR=#0000BB]i[/COLOR][COLOR=#007700]] [/COLOR][COLOR=#0000BB]then begin j[/COLOR][COLOR=#007700]:=[/COLOR][COLOR=#0000BB]i[/COLOR][COLOR=#007700]*[/COLOR][COLOR=#0000BB]i[/COLOR][COLOR=#007700]; while [/COLOR][COLOR=#0000BB]j[/COLOR][COLOR=#007700]<=[/COLOR][COLOR=#0000BB]n [/COLOR][COLOR=#007700]do [/COLOR][COLOR=#0000BB]begin prime[/COLOR][COLOR=#007700][[/COLOR][COLOR=#0000BB]j[/COLOR][COLOR=#007700]]:=[/COLOR][COLOR=#0000BB]false[/COLOR][COLOR=#007700]; [/COLOR][COLOR=#0000BB]j[/COLOR][COLOR=#007700]:=[/COLOR][COLOR=#0000BB]j[/COLOR][COLOR=#007700]+[/COLOR][COLOR=#0000BB]i[/COLOR][COLOR=#007700]; [/COLOR][COLOR=#0000BB]end[/COLOR][COLOR=#007700]; [/COLOR][COLOR=#0000BB]end[/COLOR][COLOR=#007700]; [/COLOR][COLOR=#0000BB]inc[/COLOR][COLOR=#007700]([/COLOR][COLOR=#0000BB]i[/COLOR][COLOR=#007700]); [/COLOR][COLOR=#0000BB]end[/COLOR][COLOR=#007700]; [/COLOR][COLOR=#0000BB]j[/COLOR][COLOR=#007700]:=[/COLOR][COLOR=#0000BB]0[/COLOR][COLOR=#007700]; for [/COLOR][COLOR=#0000BB]i[/COLOR][COLOR=#007700]:=[/COLOR][COLOR=#0000BB]2 to n [/COLOR][COLOR=#007700]do if [/COLOR][COLOR=#0000BB]prime[/COLOR][COLOR=#007700][[/COLOR][COLOR=#0000BB]i[/COLOR][COLOR=#007700]] [/COLOR][COLOR=#0000BB]then begin inc[/COLOR][COLOR=#007700]([/COLOR][COLOR=#0000BB]j[/COLOR][COLOR=#007700]); [/COLOR][COLOR=#0000BB]a[/COLOR][COLOR=#007700][[/COLOR][COLOR=#0000BB]j[/COLOR][COLOR=#007700]]:=[/COLOR][COLOR=#0000BB]i[/COLOR][COLOR=#007700]; [/COLOR][COLOR=#0000BB]end[/COLOR][COLOR=#007700];[/COLOR][COLOR=#0000BB]end[/COLOR][COLOR=#007700];[/COLOR] 
mình nghĩ làm như vầy sẽ nhanh hơn.