|
|
|
| Здраствуйте, у меня небольшая загвостка:
мне нужно написать в программе сумму положительных делителей числа n, которого превышает 2*n,
я организовал подсчет вручную, взял число n=24 и нашел его делители это числа: 1,2,3,4,6,8,12,24; в сумме они больше, чем 2*24=48, то есть 48<64 (ТАКИЕ ЧИСЛА НАЗЫВАЮТСЯ ИЗБЫТОЧНЫМИ),
В моем задании нужно найти первое нечетое и второе четное избыточное число.
то есть у меня проблема, посчитать избыточное число в программе. | |
|
|
|
|
|
|
|
для: Cena
(10.12.2011 в 17:55)
| | Можно начать отталкиваться от следующей программы
#include <stdio.h>
#include <iostream>
using namespace std;
// Прототип функции
int is_isbyt_number(int);
// Главная функция
int main()
{
int i = 0;
// Флаги для прекращения поиска
int flgodd = 0, flgeven = 0;
do
{
i++;
if(is_isbyt_number(i))
{
if(i % 2 && flgodd == 0)
{
// Нечетное число
flgodd++;
cout << "Первое нечетное избыточное число - " << i << endl;
}
if(!(i % 2) && flgeven < 2)
{
// Четное число
flgeven++;
if(flgeven == 1) cout << "Первое четное избыточное число - " << i << endl;
if(flgeven == 2) cout << "Второе четное избыточное число - " << i << endl;
}
}
}
while(flgeven < 2 || flgodd < 1);
// Пауза перед закрытием
system("PAUSE");
return 0;
}
// Является ли число избыточным?
int is_isbyt_number(int number)
{
int i = 1, total = 0;
if(number <= 0) return 0;
for(i = 1; i <= number; i++)
{
if(!(number % i)) total += i;
}
if(total > 2 * number) return 1;
else return 0;
} |
| |
|
|
|
|
|
|
|
для: cheops
(10.12.2011 в 18:23)
| | Спасибо, а total - это что за команда? | |
|
|
|
|
|
|
|
для: Cena
(10.12.2011 в 18:26)
| | На самом деле это переменная - в ней мы храним сумму делителей, которую потом сравниваем с удвоенным значением числа number (n).
[поправлено модератором: новый вопрос выделен в новую тему Ошибка: a function-definition is not allowed here before '{' token] | |
|
|
|
|
|
|
|
для: cheops
(10.12.2011 в 18:28)
| | Здрасвуйте, подскажите пожалуйста, а возможно ли вэтой программе поменять цикл do while на for в главной функции? И как эту строчку понять в программе if(i % 2 && flgodd == 0)? И вот эта строчка if(!(i % 2) && flgeven < 2) может ли быть записана как if(i%2==0 && flgiven<2)? | |
|
|
|
|
|
|
|
для: Cena
(24.12.2011 в 20:27)
| | >Здрасвуйте, подскажите пожалуйста, а возможно ли вэтой программе поменять цикл do while на
>for в главной функции?
Да, это возможно.
#include <stdio.h>
#include <iostream>
using namespace std;
// Прототип функции
int is_isbyt_number(int);
// Главная функция
int main()
{
int i = 0;
// Флаги для прекращения поиска
int flgodd = 0, flgeven = 0;
for(i = 0; flgeven < 2 || flgodd < 1; i++)
{
if(is_isbyt_number(i))
{
if(i % 2 && flgodd == 0)
{
// Нечетное число
flgodd++;
cout << "Первое нечетное избыточное число - " << i << endl;
}
if(!(i % 2) && flgeven < 2)
{
// Четное число
flgeven++;
if(flgeven == 1) cout << "Первое четное избыточное число - " << i << endl;
if(flgeven == 2) cout << "Второе четное избыточное число - " << i << endl;
}
}
}
// Пауза перед закрытием
system("PAUSE");
return 0;
}
// Является ли число избыточным?
int is_isbyt_number(int number)
{
int i = 1, total = 0;
if(number <= 0) return 0;
for(i = 1; i <= number; i++)
{
if(!(number % i)) total += i;
}
if(total > 2 * number) return 1;
else return 0;
} |
| |
|
|
|
|
|
|
|
для: Cena
(24.12.2011 в 20:27)
| | >И как эту строчку понять в программе if(i % 2 && flgodd == 0)?
Это читается как если число нечетное (в этом случае остаток от деления % на 2, будет давать 1) И (&&) одновременно с этим переменная flgodd равна 0, тогда выполнить тело оператора if. Т.е. оба условия должны быть одновременно справедливы и flgodd равно 0 и число i быть нечетным. | |
|
|
|
|
|
|
|
для: Cena
(24.12.2011 в 20:27)
| | >И вот эта строчка if(!(i % 2) && flgeven < 2) может ли быть записана как if(i%2==0 && flgiven<2)?
Да, вполне, так даже лучше с точки зрения стилистики, так как считается, что отрицания плохо воспринимаются. | |
|
|
|
|
|
|
|
для: cheops
(25.12.2011 в 01:45)
| | Спасибо, а вот этим условием if(is_isbyt_number(i)), что мы хотим сказать? | |
|
|
|
|
|
|
|
для: Cena
(25.12.2011 в 02:54)
| | Этим мы говорим, если число избыточное, то выполнить содержимое if-блока. | |
|
|
|
|
|
|
|
для: cheops
(25.12.2011 в 14:09)
| | Огромное Вам спасибо. С программой я разобрался. | |
|
|
|