ну... сравнивать читабельность кода я не буду, каждый может сам сравнить

но в глаза бросаются некоторые странные вещи
1. работа с массивами...
if High(Primes)
<= TopInt then
SetLength(Primes, Length(Primes) + 1000);
(если я правильно понял код, тут должен быть что-то такое)
"если массива нехвататает, увеличить его на 1000 элементов"
но! что такое High(Primes)
оно эквивалетно Length(Primes) чтоли?..
и вообще length/setlength механизм это танцы с бубнами (имхо)
2. да-да вот именно этим всех Pascal и бесит
заведением переменных для работы с сущностями,
2.1 хочешь массив - вот тебе к нему ещё щётчик

2.2 хочешь немного необычный for, всё.. получи while (хорошо что не if и goto)
3. а что кампилятор до сих пор не научился генерировать код одинаковый для
inc(i,2) и i := i+2? или считается, что inc форма более читаемая ?

P.S. будет время посмотри, как твой код работает при n=100_000_000 и n=10_000_000