Помогите найти ошибку в коде 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;