Форум: Форум C++Разное
Новые темы: 00
PHP 5/6. В подлиннике. Авторы: Кузнецов М.В., Симдянов И.В. PHP. Практика создания Web-сайтов (второе издание). Авторы: Кузнецов М.В., Симдянов И.В. PHP 5. На примерах. Авторы: Кузнецов М.В., Симдянов И.В., Голышев С.В. Объектно-ориентированное программирование на PHP. Авторы: Кузнецов М.В., Симдянов И.В. Социальная инженерия и социальные хакеры. Авторы: Кузнецов М.В., Симдянов И.В.
ВСЕ НАШИ КНИГИ
Консультационный центр SoftTime

Форум C++

Выбрать другой форум

 

Здравствуйте, Посетитель!

вид форума:
Линейный форум Структурный форум

тема: Первые два четных и первое нечетное избыточные числа
 
 автор: Cena   (10.12.2011 в 17:55)   письмо автору
 
 

Здраствуйте, у меня небольшая загвостка:
мне нужно написать в программе сумму положительных делителей числа n, которого превышает 2*n,
я организовал подсчет вручную, взял число n=24 и нашел его делители это числа: 1,2,3,4,6,8,12,24; в сумме они больше, чем 2*24=48, то есть 48<64 (ТАКИЕ ЧИСЛА НАЗЫВАЮТСЯ ИЗБЫТОЧНЫМИ),

В моем задании нужно найти первое нечетое и второе четное избыточное число.
то есть у меня проблема, посчитать избыточное число в программе.

  Ответить  
 
 автор: cheops   (10.12.2011 в 18:23)   письмо автору
 
   для: 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;
}

  Ответить  
 
 автор: Cena   (10.12.2011 в 18:26)   письмо автору
 
   для: cheops   (10.12.2011 в 18:23)
 

Спасибо, а total - это что за команда?

  Ответить  
 
 автор: cheops   (10.12.2011 в 18:28)   письмо автору
 
   для: Cena   (10.12.2011 в 18:26)
 

На самом деле это переменная - в ней мы храним сумму делителей, которую потом сравниваем с удвоенным значением числа number (n).

[поправлено модератором: новый вопрос выделен в новую тему Ошибка: a function-definition is not allowed here before '{' token]

  Ответить  
 
 автор: Cena   (24.12.2011 в 20:27)   письмо автору
 
   для: 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)?

  Ответить  
 
 автор: cheops   (25.12.2011 в 01:40)   письмо автору
 
   для: 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;
}

  Ответить  
 
 автор: cheops   (25.12.2011 в 01:44)   письмо автору
 
   для: Cena   (24.12.2011 в 20:27)
 

>И как эту строчку понять в программе if(i % 2 && flgodd == 0)?
Это читается как если число нечетное (в этом случае остаток от деления % на 2, будет давать 1) И (&&) одновременно с этим переменная flgodd равна 0, тогда выполнить тело оператора if. Т.е. оба условия должны быть одновременно справедливы и flgodd равно 0 и число i быть нечетным.

  Ответить  
 
 автор: cheops   (25.12.2011 в 01:45)   письмо автору
 
   для: Cena   (24.12.2011 в 20:27)
 

>И вот эта строчка if(!(i % 2) && flgeven < 2) может ли быть записана как if(i%2==0 && flgiven<2)?
Да, вполне, так даже лучше с точки зрения стилистики, так как считается, что отрицания плохо воспринимаются.

  Ответить  
 
 автор: Cena   (25.12.2011 в 02:54)   письмо автору
 
   для: cheops   (25.12.2011 в 01:45)
 

Спасибо, а вот этим условием if(is_isbyt_number(i)), что мы хотим сказать?

  Ответить  
 
 автор: cheops   (25.12.2011 в 14:09)   письмо автору
 
   для: Cena   (25.12.2011 в 02:54)
 

Этим мы говорим, если число избыточное, то выполнить содержимое if-блока.

  Ответить  
 
 автор: Cena   (25.12.2011 в 18:39)   письмо автору
 
   для: cheops   (25.12.2011 в 14:09)
 

Огромное Вам спасибо. С программой я разобрался.

  Ответить  
Rambler's Top100
вверх

Rambler's Top100 Яндекс.Метрика Яндекс цитирования