Помогите найти ошибку в коде pascal

Заставили делать дз на паскале, но почему-то результат получается разным, пишу от силы 2 раз в жизни и не могу понять где ошибка. Смысл задачи это поиск праймориала (произведение n простых чисел).

Рабочий код на c++:

#include <iostream>

using namespace std;

bool simple(int n) {
    int sqr;
    if (n % 2 == 0) {
        return false;
    }
    sqr = sqrt(n);
    for (int i = 3; i <= sqr; i++) {
        if ((n % i) == 0) {
            return false;
        }
    }
    return true;

}

int main() {

    int n;
    cin >> n;
    
    int i = 2, temp = 0, sum = 2;
    while (true) {
        if (simple(i)) {
            sum *= i;
            temp++;
        }
        i++;
        if (temp == n-1) {
            break;
        }
    }
    cout << sum;

}

Не рабочий на паскале:

program Zantoryu;
function simple(n:integer): integer;
begin
  var sqr:real;
  if n mod 2 = 0 then
    Result := 0;
  sqr := sqrt(n);
  var i:integer;
  i := 3;
  while i <= sqr do 
  begin
    if (n mod i) = 0 then
      Result := 0;
    i := i + 1;
  end;
Result := 1;
end;

var res:BigInteger;
var onigiri, n, temp, i:integer;

begin
readln(n);
temp := 0; i := 2; onigiri := 2;
while true do
begin
  if simple(i) = 1 then
     onigiri := onigiri * i;
     temp := temp + 1;
i := i + 1;
  if temp = n-1 then
    break;
end;

writeln(onigiri);
end.

Как я понял проблема в функции, но как не пробовал решить не получилось, при вводе 4 выдает 48, а не 210


Ответы (1 шт):

Автор решения: Igor
if (n mod i) = 0 then
begin
  Result := 0;
  exit; // <---
end;

...

if simple(i) = 1 then
begin
  onigiri := onigiri * i;
  temp := temp + 1;
end;
→ Ссылка