macbest
26-07-2008, 12:20
Hallo,
habe mal versucht die Fermat und die Lehmann-Methode selbst zu implementieren, hat leider nicht so richtig funktioniert. Wäre toll, wenn sich mal jemand meinen Quellcode anschauen könnte. Habe nur die relevanten Teile gepostet.
Fermat:
<?php
if (!empty($_POST['n']) && is_numeric($_POST['n'])) {
rechne($_POST['n']);
}
function rechne($n) {
$c=0;
for ($a=ceil(sqrt($_POST['n'])); $a<=($_POST['n']+9)/6; $a++) {
if (is_int(sqrt($a*$a-$_POST['n']))){
echo $a-sqrt($a*$a-$_POST['n']) . "<br>";
$c=1;
}
}
if ($c==0){
echo $_POST['n'] . "ist Primzahl";
}
}
?>
Lehman
<?php
if (!empty($_POST['n']) && is_numeric($_POST['n'])) {
faktorisierung($_POST['n']);
}
function faktorisierung($n) {
testdivision($_POST['n']);
if ($erfolg==0){
for($k=1 ; $k<=ceil($_POST['n']^(1/3)); $k++){
for ($a=2*sqrt($k*$_POST['n']); $a<=floor(2*sqrt($k*$_POST['n'])+$_POST['n']^(1/6)/(4*sqrt($k))); $a++){
if(is_int(sqrt(a^2-4*$k*$_POST['n']))) {
echo "Faktor ist: " . ggt($a+sqrt(a^2-4*$k*$_POST['n']),$_POST['n']);
}
}
}
}
}
function testdivision($n){
$erfolg=1;
for ($i=2; $i<$_POST['n']^(1/3);$i++) {
if ($_POST['n'] % $i == 0) {
echo $_POST['n'] . "hat nichttrivialen Teiler" . $i ."<br>";
}
else {
$erfolg=0;
return $erfolg;
}
}
}
function ggt($a,$b){
if ($a > $b) {
$dummy=0;
$dummy=$a;
$a=0;
$a=$b;
$b=0;
$b=$dummy;
}
$c=1;
while ($c!=0) {
$c = $a % $b;
$a = $b;
$b=$c;
}
return $a;
}
?>
habe mal versucht die Fermat und die Lehmann-Methode selbst zu implementieren, hat leider nicht so richtig funktioniert. Wäre toll, wenn sich mal jemand meinen Quellcode anschauen könnte. Habe nur die relevanten Teile gepostet.
Fermat:
<?php
if (!empty($_POST['n']) && is_numeric($_POST['n'])) {
rechne($_POST['n']);
}
function rechne($n) {
$c=0;
for ($a=ceil(sqrt($_POST['n'])); $a<=($_POST['n']+9)/6; $a++) {
if (is_int(sqrt($a*$a-$_POST['n']))){
echo $a-sqrt($a*$a-$_POST['n']) . "<br>";
$c=1;
}
}
if ($c==0){
echo $_POST['n'] . "ist Primzahl";
}
}
?>
Lehman
<?php
if (!empty($_POST['n']) && is_numeric($_POST['n'])) {
faktorisierung($_POST['n']);
}
function faktorisierung($n) {
testdivision($_POST['n']);
if ($erfolg==0){
for($k=1 ; $k<=ceil($_POST['n']^(1/3)); $k++){
for ($a=2*sqrt($k*$_POST['n']); $a<=floor(2*sqrt($k*$_POST['n'])+$_POST['n']^(1/6)/(4*sqrt($k))); $a++){
if(is_int(sqrt(a^2-4*$k*$_POST['n']))) {
echo "Faktor ist: " . ggt($a+sqrt(a^2-4*$k*$_POST['n']),$_POST['n']);
}
}
}
}
}
function testdivision($n){
$erfolg=1;
for ($i=2; $i<$_POST['n']^(1/3);$i++) {
if ($_POST['n'] % $i == 0) {
echo $_POST['n'] . "hat nichttrivialen Teiler" . $i ."<br>";
}
else {
$erfolg=0;
return $erfolg;
}
}
}
function ggt($a,$b){
if ($a > $b) {
$dummy=0;
$dummy=$a;
$a=0;
$a=$b;
$b=0;
$b=$dummy;
}
$c=1;
while ($c!=0) {
$c = $a % $b;
$a = $b;
$b=$c;
}
return $a;
}
?>