Я пытаюсь перевести этот код C в код OCaml, который должен проверить, является ли входное число int простым числом или нет. Мой код C работает, но мой код ocaml даже не запускается.
void is_prime(int pri){
int a=2;
int b=poww(a,2);
while(b<=pri){
int resu=pri%a;
if(resu==0) {
printf("False");
return 0;
}
a++;
b=poww(a,2);
}
printf("True");
}
А это мой код OCaml:
let is_prime n =
let a= ref 2 in
let b= ref (pow !a 2) in
let c= ref true in
while !b<n do
let resu= (n mod !a) in
if resu=0 then c:=false;
a:=!a+1;
b:=(pow !a 2);
done in
if c=false then false
else true
;;
То, что я хочу, - это код OCaml, который принимает int в качестве входных данных и выводит логическое значение. pow в моем коде OCaml - это существующая функция pow a b (где a и b - int и выводят a ^ b). По какой-то причине код не работает ...
Обновление: проблема решена
Новый код Ocaml, который работает:
let is_prime n =
if n>1 then
let a= ref 2 in
let b= ref (pow !a 2) in
let c= ref true in
while !b<n do
(*ignore (Printf.printf "abc");*)
let resu= (n mod !a) in
if resu=0 then c:=false;
a:=!a+1;
b:=(pow !a 2);
done;
if !c then true
else false
else raise Domain
;;