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
01.
/**
02.
* Checks whether the number is perfect
03.
* @param number tested number
04.
* @return true if the number is perfect, false otherwise
05.
*/
06.
public
static
boolean
isPerfect(
long
number) {
07.
//odd perfect number (probably) does not exist, and even if it does, it has a higher value than long can represent
08.
if
(number %
2
==
1
) {
09.
return
false
;
10.
}
11.
12.
long
result =
1
;
//1 is a trivial divisor
13.
long
i =
2
;
14.
while
(i * i <= number) {
//until i <= sqrt(number)
15.
if
(number % i ==
0
) {
16.
result += i;
17.
result += number / i;
18.
}
19.
i++;
20.
}
21.
if
(i * i == number) {
//perfect square, sqrt(number) was added twice
22.
result -= i;
23.
}
24.
return
result == number;
25.
}
01.
/**
02.
* Checks whether the number is perfect
03.
* @param $number tested number
04.
* @return true if the $number is perfect, false otherwise
05.
*/
06.
function
isPerfect(
$number
) {
07.
if
(
$number
% 2 == 1) {
08.
return
false;
09.
}
10.
11.
$result
= 1;
//1 is a trivial divisor
12.
$i
= 2;
13.
while
(
$i
*
$i
<=
$number
) {
//until i <= sqrt(number)
14.
if
(
$number
%
$i
== 0) {
15.
$result
+=
$i
;
16.
$result
+=
$number
/
$i
;
17.
}
18.
$i
++;
19.
}
20.
if
(
$i
*
$i
==
$number
) {
//perfect square, sqrt(number) was added twice
21.
$result
-=
$i
;
22.
}
23.
return
$result
==
$number
;
24.
}