Php ile büyük asal faktörü

3 Cevap php

Yani, ben php ile büyük asal faktörünü bulmak için php programı yazdı ve ben oldukça hızlı yükler, çünkü oldukça iyi olduğunu düşünüyorum. Ama bir sorun, çok büyük sayılar asal faktörleri sayılmaz vardır. İşte program:

function is_even($s) {

    $sk_sum = 0;

    for($i = 1; $i <= $s; $i++) {

        if($s % $i == 0) { $sk_sum++; }     

    }

    if($sk_sum == 2) {

        return true;

    }

}

$x = 600851475143; $i = 2; //x is number

while($i <= $x) {

        if($x % $i == 0) {

            if(is_even($i)) {

                $sk = $i; $x = $x / $i;

            }

        }

    $i++;

}

echo $sk;

3 Cevap

PHP büyük sivil taşan tamsayı sabiti saklanır PHP_INT_MAX.

PHP bu değerden daha büyük tamsayılar ile çalışmak mümkün olmayacaktır.

PHP'nin önceden tanımlanmış sabitler tümünü görmek için, sadece kullanmak:

<?php
echo '<pre>';
print_r(get_defined_constants());
echo '</pre>';
?>

PHP_INT_MAX muhtemelen 2,147,483,647 bir değere sahiptir.

PHP keyfi hassas numaralarını işlemek için GMP or BC Math PHP uzantıları ya bakın.

Sen Prime testing hakkında okumak ve Sieving. Gerekir

Özellikle, size bölenler her asal olup olmadığını test etmek gerekmez.

Aşağıdaki gibi bir şey daha hızlı olacaktır.

while($i <= $x) 
{
    while ($x % $i == 0)
    {
        $sk = $i;
        $x = $x / $i;
    }
    $i++;
}

$ I sqrt ($ x) ulaştığında Ayrıca dış döngü durdurabilir, ve henüz bir bölen bulunamadı varsa o zaman $ x asal olduğunu biliyorum.

Kuyu (sırasında genellikle aynı) sınırlamalar, her dil kendi bulunuyor, bu nedenle bu php sınırı aşarsanız, size herhangi bir yüksek alınamıyor. Max Tamsayı 9E18 olduğunu.