Напишите программу, которая вводит натуральное число n и определяет является ли число n совершенным. если можно с подробным или кратким объяснением

ВикаФан ВикаФан    2   26.06.2019 05:40    0

Ответы
mrdrozdovoy228 mrdrozdovoy228  21.07.2020 06:54
Число считается совершенным, если оно равно сумме своих делителей, исключая себя самого. Для проверки, является ли число N совершенным, полагаем будущую сумму делителей равной 1 (на единицу число всегда делится) и последовательно делим N на числа, начиная от 2 и заканчивая N/2.
Если число делится без остатка на очередной делитель, добавляем его к сумме. После завершения цикла делений сравниваем сумму с N и в случае равенства объявляем число N совершенным. В начале алгоритма проверяем, чтобы N было больше 1, в противном случае сразу объявляем число не совершенным.

var
  i,n,s:longint;
begin
  Write('Введите натуральное число: '); Read(n);
  if n=1 then Writeln('Число 1 не является совершенным')
  else begin
    s:=1;
    for i:=2 to (n div 2) do
      if (n mod i)=0 then s:=s+i;
    if s=n then Writeln('Число является совершенным')
    else Writeln('Число не является совершенным')
  end
end.

Тестовое решение:
Введите натуральное число: 33550336
Число является совершенным

Введите натуральное число: 543252
Число не является совершенным
ПОКАЗАТЬ ОТВЕТЫ
ка566 ка566  21.07.2020 06:54
По определению совершенным числом называется то число, которое равно сумме своих делителей отличных от самого числа. Значит,чтобы решить задачу нам нужно найти сумму делителей числа и проверить равна ли она самому числу.
var
  sum, N, i:integer;
begin
  readln(N);//читаем число с клавиатуры
 //Проверяем делатели до N-1, т.к. нам нужны делители не равные
//самому числу
  for i:=1 to N-1 do
    if N mod i = 0 then//Если i является делителем N, то...
      sum:=sum+i;// ...прибавляем его к сумме делителей
// Проверяем равна ли сумма делителей числа самому числу.
  if sum = N then
    writeln('Число совершенное')
  else   
    writeln('Число не совершенное');
end.
ПОКАЗАТЬ ОТВЕТЫ
mix42 mix42  22.10.2020 03:55
#include <bits/stdc++.h>

using namespace std;

bool perfect_number(int n)
{
    int res = 1;
    for (int i = 2; i * i <= n; ++i)
        if (n % i == 0)
            res += i + n / i;
    return res == n?1:0;
}

int main()
{
    int n;
    cin >> n;
    cout << perfect_number(n)?"YES":"NO";
}
ПОКАЗАТЬ ОТВЕТЫ
danchik60 danchik60  22.10.2020 03:55

def check_perfect(number:int, dividers = []):

for i in range(1, number):

 if number%i == 0:

  dividers.append(i)

if sum(dividers) == number:

 return 1

def get_div(num, div = []):

for i in range(1, num):

 if num%i == 0:

  div.append(i)

return div

def main():

number = int(input())

if check_perfect(number):

 print(' '.join(str(num) for num in get_div(number)))

else:

 print(0)

if __name__ == '__main__':

main()

Объяснение:

На случай, если сайт сломает табуляции в коде (А он их сломает), ниже представлен скриншот оригинала кода. Программа протестирована.


совершенным называется число, равное сумме всех своих делителей, меньших его самого (например, число
ПОКАЗАТЬ ОТВЕТЫ
kartofan2016p08uuy kartofan2016p08uuy  22.10.2020 03:55

var n,z,n1,e:integer;

begin

e:=0;

readln(n);

n1:=n div 2;

for z:=1 to n1 do begin

if (n mod z = 0) then e:=e+z;

end;

if (e=n)

then writeln('соверншенное')

else writeln('0');

end.

ПОКАЗАТЬ ОТВЕТЫ
Kolelove050 Kolelove050  22.10.2020 03:55
Function Check(a : Integer) : Boolean;
Var i,s : Integer;
Begin
  s:=0;
  For i:=1 to a-1 do
    If a mod i=0 then s:=s+i;
  Check:=s=a;
end;
Var N : Integer;
Begin
  Readln(N);
  Writeln(Check(N));
end.
ПОКАЗАТЬ ОТВЕТЫ
zonanip zonanip  22.10.2020 03:55
PascalABC.NET 3.4.2, сборка 1881 от 19.11.2018Внимание! Если программа не работает, обновите версию!

function СовершенноеЧисло(n: integer): boolean;

begin

 var (s,d,n2) := (1,2,n div 2);

 while d <= n2 do

 begin

   if n mod d = 0 then s += d;

   Inc(d)

 end;

 Result := n = s

end;


begin

 if СовершенноеЧисло(ReadInteger) then Print('Совершенное')

 else Print('Несовершенное')

end.

Пример33550336Совершенное
ПОКАЗАТЬ ОТВЕТЫ
Ятот Ятот  22.10.2020 03:55
Совершенное число - натуральное число, равное сумме всех своих собственных делителей (то есть всех положительных делителей, отличных от самого числа).
 
//Pascal
var
  n, s, i: integer;

begin
  s := 0;
  readln(n);
  // Находим делители до n-1, увеличиваем сумму s на i,
  // если i - делитель введенного числа
  for i := 1 to n - 1 do
    if n mod i = 0 then s := s + i;
 
  if s = n then
    writeln('cовершенное')
  else   
    writeln('не совершенное');
end.
ПОКАЗАТЬ ОТВЕТЫ
Другие вопросы по теме Информатика