Dokonalé číslo je takové přirozené číslo, které má stejnou hodnotu, jako součet všech jeho kladných dělitelů (kromě jeho samého). První dokonalá čísla jsou 6, 28, 496, 8128 a všechna jsou ve tvaru . Řecký matematik Euklides dokázal, že tento vzorec vrátí vždy dokonalé číslo, pokud je prvočíslo.
Dosud byla nalezena pouze sudá dokonalá čísla, ale existence lichých nebyla doposud vyvrácena. Dle současných poznatků musí být liché dokonalé číslo vyšší než .
Příklady dokonalých čísel
Kód
/** * Checks whether the number is perfect * @param number tested number * @return true if the number is perfect, false otherwise */ public static boolean isPerfect(long number) { //odd perfect number (probably) does not exist, and even if it does, it has a higher value than long can represent if (number % 2 == 1) { return false; } long result = 1; //1 is a trivial divisor long i = 2; while (i * i <= number) { //until i <= sqrt(number) if (number % i == 0) { result += i; result += number / i; } i++; } if (i * i == number) { //perfect square, sqrt(number) was added twice result -= i; } return result == number; }
/** * Checks whether the number is perfect * @param $number tested number * @return true if the $number is perfect, false otherwise */ function isPerfect($number) { if ($number % 2 == 1) { return false; } $result = 1; //1 is a trivial divisor $i = 2; while ($i * $i <= $number) { //until i <= sqrt(number) if ($number % $i == 0) { $result += $i; $result += $number / $i; } $i++; } if ($i * $i == $number) { //perfect square, sqrt(number) was added twice $result -= $i; } return $result == $number; }