Открыл старую тему и переместил вопрос туда. (Тема была закрыта, чтобы отвадить любителей подбрасывать свои задачки в чужие темы). Объясняю.
Булева функция Test(J) возвращает true, если аргумент (J) - простое число, и false в противном случае. Проверка проводится "в лоб": вычисляются остатки от деления J на все числа, начиная с J/2 и до 2, и если хоть один остаток оказывается нулевым, то проверка прерывается и функция получает значение false.
Дальше - всё просто: искомой сумме и стартовому номеру вводимого числа присваиваются начальные значения S=0 и i=0, дальше организуется цикл ввода Repeat..Until, прерывающийся при введении А=0, в котором проверяется, является ли номер вводимого числа простым. Если является, то булевой переменной-флажку q присваивается значение true, в противном случае - false. Простым считается номер либо меньший 4 (т.е. 1, 2 и 3), либо, если он больше 3, то прошедший тестирование с помощью функции Test(i). Если q=true, то выдается сообщение "prime position", т.е. номер очередного вводимого А - простое число, и это А прибавляется к сумме (на всякий случай там еще "отсекаются" отрицательные числа). Далее осталось только выдать полученную сумму на экран и остановить выполнение программы до нажатия клавиши "Enter", что делается оператором Readln. Вроде как и всё.