Найти совершенные числа в диапазоне от 1 до N - C (СИ)

Узнай цену своей работы

Формулировка задачи:

Найти совершенные числа в диапазоне от 1 до N. Написал код только у меня функция принимает число и проверят является ли это число совершенным. А мне надо в диапазоне. Никак в голову не приходит как реализовать ... естественно циклы НО как ??? ВОт мой код
Листинг программы
  1. void perfect(int num)
  2. {
  3. int i, j;
  4. int summ = 1;
  5. for(i = 2; i < num; i++)
  6. {
  7. if(num % i == 0)
  8. {
  9. printf("%d ", i);
  10. summ += i;
  11. }
  12. }
  13. printf("\n summ = %d \n", summ);
  14. if(num == summ)
  15. {
  16. printf("This is perfect number! \n");
  17. }
  18. else
  19. {
  20. printf("This is not perfect number! \n");
  21. }
  22. }

Решение задачи: «Найти совершенные числа в диапазоне от 1 до N»

textual
Листинг программы
  1. #include <stdio.h>
  2. #include <assert.h>
  3.  
  4. int IsPerfect( int n ) {
  5.     int i, s = 1;
  6.     for( i = 2; i < n; ++i ) {
  7.         if ( n % i == 0 ) {
  8.             s += i;
  9.         }
  10.     }
  11.     return ( n == s && n != 1 );
  12. }
  13.  
  14. void ShowMePerfectNumbersPlz( int from, int to ) {
  15.     int i;
  16.     assert( from < to );
  17.     printf("Perfect numbers from %d to %d is ", from, to);
  18.     for ( i = from; i <= to; ++i ) {
  19.         if ( IsPerfect(i) ) {
  20.             printf("%d; ", i);
  21.         }
  22.     }
  23. }
  24.  
  25. int main( int argc, char ** argv ) {
  26.     ShowMePerfectNumbersPlz(1, 100);
  27.     return 0;
  28. }

Объяснение кода листинга программы

  1. Программа находит совершенные числа в заданном диапазоне от 1 до N.
  2. Совершенное число - это число, которое делится без остатка на все числа от 2 до N-1, и при этом само не равно 1.
  3. В функции IsPerfect(int n) переменной i присваивается значение 2, а переменной s - 1. Затем цикл for проходит по всем числам от 2 до n-1. Если n делится без остатка на текущее значение i, то к переменной s прибавляется значение i.
  4. Функция ShowMePerfectNumbersPlz(int from, int to) выводит совершенные числа в заданном диапазоне от from до to. С помощью assert проверяется, что from < to.
  5. В цикле for перебираются все числа от from до to. Если число является совершенным (то есть функция IsPerfect возвращает 1), то оно выводится на экран с помощью printf.
  6. В функции main() вызывается функция ShowMePerfectNumbersPlz(1, 100), которая выводит все совершенные числа в диапазоне от 1 до 100.
  7. Возвращаемое значение функции main() равно 0, что означает успешный конец работы программы.

ИИ поможет Вам:


  • решить любую задачу по программированию
  • объяснить код
  • расставить комментарии в коде
  • и т.д
Попробуйте бесплатно

Оцени полезность:

7   голосов , оценка 4.429 из 5

Нужна аналогичная работа?

Оформи быстрый заказ и узнай стоимость

Бесплатно
Оформите заказ и авторы начнут откликаться уже через 10 минут
Похожие ответы