Найти совершенные числа в диапазоне от 1 до N - C (СИ)
Формулировка задачи:
Найти совершенные числа в диапазоне от 1 до N.
Написал код только у меня функция принимает число и проверят является ли это число совершенным. А мне надо в диапазоне. Никак в голову не приходит как реализовать ... естественно циклы НО как ???
ВОт мой код
void perfect(int num) { int i, j; int summ = 1; for(i = 2; i < num; i++) { if(num % i == 0) { printf("%d ", i); summ += i; } } printf("\n summ = %d \n", summ); if(num == summ) { printf("This is perfect number! \n"); } else { printf("This is not perfect number! \n"); } }
Решение задачи: «Найти совершенные числа в диапазоне от 1 до N»
textual
Листинг программы
#include <stdio.h> #include <assert.h> int IsPerfect( int n ) { int i, s = 1; for( i = 2; i < n; ++i ) { if ( n % i == 0 ) { s += i; } } return ( n == s && n != 1 ); } void ShowMePerfectNumbersPlz( int from, int to ) { int i; assert( from < to ); printf("Perfect numbers from %d to %d is ", from, to); for ( i = from; i <= to; ++i ) { if ( IsPerfect(i) ) { printf("%d; ", i); } } } int main( int argc, char ** argv ) { ShowMePerfectNumbersPlz(1, 100); return 0; }
Объяснение кода листинга программы
- Программа находит совершенные числа в заданном диапазоне от 1 до N.
- Совершенное число - это число, которое делится без остатка на все числа от 2 до N-1, и при этом само не равно 1.
- В функции IsPerfect(int n) переменной i присваивается значение 2, а переменной s - 1. Затем цикл for проходит по всем числам от 2 до n-1. Если n делится без остатка на текущее значение i, то к переменной s прибавляется значение i.
- Функция ShowMePerfectNumbersPlz(int from, int to) выводит совершенные числа в заданном диапазоне от from до to. С помощью assert проверяется, что from < to.
- В цикле for перебираются все числа от from до to. Если число является совершенным (то есть функция IsPerfect возвращает 1), то оно выводится на экран с помощью printf.
- В функции main() вызывается функция ShowMePerfectNumbersPlz(1, 100), которая выводит все совершенные числа в диапазоне от 1 до 100.
- Возвращаемое значение функции main() равно 0, что означает успешный конец работы программы.
ИИ поможет Вам:
- решить любую задачу по программированию
- объяснить код
- расставить комментарии в коде
- и т.д