Программа нахождения следующего за данным совершенного числа. Совершенным называется число, сумма делителей которого, не считая самого числа равна этому числу. Первое совершенное число 6 (6=1+2+3).
Источник
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 37 38 39 40 41 42 43 44 45 46 47 48 49 50 51 52 53 54 55 56 57 58 59 60 | function is_perfect(n : longint) : boolean; var s : longint; divider : Integer; begin s := 1; for divider := 2 to trunc(sqrt(n)) do if n mod divider = 0 then s := s + divider + (n div divider); is_perfect := (n = s); end; function get_candidate(len : integer) : longint; var s : string; i : integer; value : longint; begin s := ''; for i := 1 to len do s := '1' + s + '0'; s := '1' + s; value := 0; for i := 1 to length(s) do value := 2 * value + (ord(s[i]) - ord('0')); get_candidate := value; end; function to_bin(n : longint) : string; var s : string; const digit: string[2]='01'; begin s := ''; repeat s := digit[(n mod 2) + 1] + s; n := n div 2; until n = 0; to_bin := s; end; var found : boolean; bin : integer; bin_s : string; check : LongInt; n : longint; begin { n := 496; } write('perfect number: '); readln(n); bin_s := to_bin(n); bin := (length(bin_s) - 1) div 2; repeat inc(bin); check := get_candidate(bin); found := is_perfect(check); until found; writeln('next perfect number = ', check); end. |
Источник
Комментариев нет:
Отправить комментарий