求一定值内的质数——
1 uses 2 System.SysUtils, 3 System.Generics.Collections, 4 System.Classes; 5 6 function ElementInDataDivides(data: TList<Integer>; value: Integer): boolean; 7 var 8 i: Integer; 9 begin 10 Result := True; 11 for i in data do 12 if (value <> i) and ((value mod i) = 0) then 13 Exit; 14 Result := False; 15 end; 16 17 function Reverse(s: string): string; 18 var 19 ch: char; 20 begin 21 Result := ''; 22 for ch in s do 23 Result := ch + Result; 24 end; 25 26 function Filter(list: TList<Integer>): TArray<Integer>; 27 var 28 i: Integer; 29 reversed: Integer; 30 begin 31 SetLength(Result, 0); 32 for i in list do 33 begin 34 reversed := StrToInt(Reverse(IntToStr(i))); 35 if not ElementInDataDivides(list, reversed) then 36 begin 37 SetLength(Result, Length(Result) + 1); 38 Result[High(Result)] := i; 39 end; 40 end; 41 end; 42 43 function SlowMethod(highBound: Integer): TArray<Integer>; 44 var 45 i: Integer; 46 temp: TList<Integer>; 47 begin 48 temp := TList<Integer>.Create; 49 try 50 for i := 2 to highBound do 51 if not ElementInDataDivides(temp, i) then 52 temp.Add(i); 53 Result := Filter(temp); 54 finally 55 FreeAndNil(temp); 56 end; 57 end; 58 59 procedure ShowElements(data: TArray<Integer>); 60 var 61 i: integer; 62 begin 63 for i in data do 64 Write(i, ' '); 65 Writeln; 66 end; 67 68 procedure Test; 69 var 70 data: TArray<Integer>; 71 highBound: Integer; 72 begin 73 repeat 74 Writeln('How many numbers (0 to exit)?'); 75 Write('> '); 76 Readln(highBound); 77 if highBound = 0 then 78 Exit; 79 80 data := SlowMethod(highBound); 81 ShowElements(data); 82 until false; 83 end;