Реализации алгоритмов/Метод Лемана: различия между версиями

Содержимое удалено Содержимое добавлено
дополнение
Нет описания правки
Строка 40:
end;
end;
</source>
 
== Perl ==
 
<source lang="pascal">
#!/usr/bin/perl -w
use Math::BigInt;
$N = Math::BigInt->new();
sub nod
{
return $_[0] != 0 ? nod ( ( $_[1] % $_[0] ), $_[0] ) : $_[1];
}
sub Lehman {
for ($i=2; $i < int($N**1/3);$i++) {
if (($N % $i) == 0) {
$Result = $i;
return 1;
}
}
for ($k=1; $k < int($N**1/3); $k++) {
for ($d=0; $d < int(($N**(1/6))/(4*($k**.5)))+1; $d++) {
$A = int((4*$k*$N)**.5)+$d;
$t = ($A**.5) - 4*$k*$N;
return -1 if $t < 0;
$B = int($t**.5);
if (($B**2) == $t ) {
$dd = nod($A-$B, $N);
if (1 < $dd and $dd < $N) {
$Result = $dd;
return 1;
}
}
}
}
return 1;
}
print "Please, input a number N="; chomp($N=<STDIN>);
if (Lehman == -1) {
print "Number $N is prime\n";
} else {
print "Number $N is not prime\n";
}
</source>