Форум программистов, компьютерный форум CyberForum.ru
Наши страницы

С++ для начинающих

Войти
Регистрация
Восстановить пароль
 
xexew
0 / 0 / 0
Регистрация: 22.02.2011
Сообщений: 76
#1

Совершенные числа - C++

13.10.2011, 22:36. Просмотров 895. Ответов 5
Метки нет (Все метки)

Вводится число n, требуется вывести совершенные числа до n.
C++
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
#include "stdafx.h"
#include <iostream>
 
using namespace std;
 
void main()
{
    int n;
    cin >> n;
    int sum=0;
    for(int i = 5; i < n; i++)
    {   
        sum=0;
        for(int j = 1; j < (n / 2); j++)
        
        {
            if(i % j == 0)
                {
                    sum+=j;
                }
        }
            if(i==sum)
            {
                cout << i << " ";
                
            }           
    }
}
Выводит только бОльшее совершенное число, помогите пожалуйста, скажите, как доработать программу что бы выводил все совершенные числа.
0
Similar
Эксперт
41792 / 34177 / 6122
Регистрация: 12.04.2006
Сообщений: 57,940
13.10.2011, 22:36
Здравствуйте! Я подобрал для вас темы с ответами на вопрос Совершенные числа (C++):

Для заданного натурального числа N вывести в столбик все совершенные числа меньшие N c++ - C++
Для заданного натурального числа N вывести в столбик все совершенные числа меньшие N. Совершенное число – натуральное число, которое равно...

Совершенные числа - C++
Натуральное число называется совершенным, если оно равно сумме всех своих делителей, кроме себя самого. Число 6 является совершенным, так...

Совершенные числа. - C++
подскажите как переделать под С , а не С++ буду признателен #include &lt;iostream.h&gt; #include&lt;conio.h&gt; #include &lt;vcl.h&gt; ...

Совершенные числа. - C++
По введеному натуральному числу N визначити, чи є воно досконалим. Досконале число дорівнює сумі усіх своїх дільників, включаючи одиницю і...

Совершенные числа - C++
Как из этого кода сделать алгоритм, который находит совершенные числа. #include &lt;iostream&gt; using namespace std; int main() { ...

Совершенные числа - C++
В интервале от a до b напечатать совершенные числа. Совершенное число, равно сумме всех своих делителей, например 28=1+2+4+7+14

Надоела реклама? Зарегистрируйтесь и она исчезнет полностью.
Dani
1393 / 637 / 57
Регистрация: 11.08.2011
Сообщений: 2,282
Записей в блоге: 2
Завершенные тесты: 1
13.10.2011, 22:44 #2
эту задачу надо решать так:
вбить все совершенные числа в константный массив и выводить все, меньшие n. Если n будет например 10^9, то ваша программа слетит по времени. А мой алгоритм будет работать практически при любых значениях. (я эту задачу уже делал, сдавал 2 раза на разные тесты и везде проходила полностью).
0
xexew
0 / 0 / 0
Регистрация: 22.02.2011
Сообщений: 76
13.10.2011, 22:48  [ТС] #3
так не интересно) да и не честно, программа же не ищет совершенные числа, а просто выводит)
0
Dani
1393 / 637 / 57
Регистрация: 11.08.2011
Сообщений: 2,282
Записей в блоге: 2
Завершенные тесты: 1
13.10.2011, 22:52 #4
я конечно извиняюсь, но у меня НИЧЕГО не выводит.

Добавлено через 47 секунд
Цитата Сообщение от xexew Посмотреть сообщение
так не интересно) да и не честно, программа же не ищет совершенные числа, а просто выводит)
при ограничениях в задачах такого типа - перебор не пройдет, а так написал перебор, подождал чуть, вбил в массив и готово! =)

Добавлено через 1 минуту
ну 1 ошибка - не j до n/2, а до i/2
0
xexew
0 / 0 / 0
Регистрация: 22.02.2011
Сообщений: 76
13.10.2011, 22:54  [ТС] #5
по крайней мере 496 выводил с int'ом, я его заменил на unsigned long long и он спокойно вывел 8128

cтранно работает программа, если ввести 30 то она выведет 28, а если 100 то не выведет
0
Dani
1393 / 637 / 57
Регистрация: 11.08.2011
Сообщений: 2,282
Записей в блоге: 2
Завершенные тесты: 1
13.10.2011, 23:01 #6
и еще до i/2+1 и программа рабочая (на первый взгляд)

Добавлено через 40 секунд
C++
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
#include "stdafx.h"
#include <iostream>
 
using namespace std;
 
void main()
{
        int n;
        cin >> n;
        int sum=0;
        for(int i = 5; i < n; i++)
        {       
           sum=0;
                
           for(int j = 1; j < i/2+1; j++)
             if(i % j == 0) sum+=j;
 
           if(i==sum) cout << i << " ";                       
        }
        system ("pause");
}
Добавлено через 5 минут
я ее даже усовершенствовал
C++
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
#include "stdafx.h"
#include <iostream>
#include <math.h>
 
using namespace std;
 
void main()
{
        int n;
        cin >> n;
        int sum=0;
        for(int i = 5; i < n; i++)
        {       
           sum=0;
                
           for(int j = 1; j < (int)(sqrt(i*1.0))+1; j++)
             if(i % j == 0) 
                 {
                     sum+=j;
                     if (j!=i/2 && j>1) sum+=i/j;
                 }
 
           if(i==sum) cout << i << " ";                       
        }
        system ("pause");
}
1
MoreAnswers
Эксперт
37091 / 29110 / 5898
Регистрация: 17.06.2006
Сообщений: 43,301
13.10.2011, 23:01
Привет! Вот еще темы с ответами:

Совершенные числа - C++
Здравствуйте. Пытаюсь решить следующую задачку: реализовать метод, который получает число n и возвращает все совершенные числа в диапазоне...

совершенные числа - C++
Здрасте,помогите организовать программу на Си,которая определяет является ли введённое с клавиатуры число совершенным. и надо расписать...

Совершенные числа(косяк) - C++
Добрый день! Возникла проблема с вывод совершенных чисел в интервале от m до n. Почему-то вообще не выводит, хотя проверял похожий...

Рекурсия, совершенные числа - C++
Добрый вечер. Столкнулся с проблемой написания рекурсивной функции для определения, совершенное число или нет. Попробовал сделать так,...


Искать еще темы с ответами

Или воспользуйтесь поиском по форуму:
Yandex
Объявления
13.10.2011, 23:01
Ответ Создать тему
Опции темы

КиберФорум - форум программистов, компьютерный форум, программирование
Powered by vBulletin® Version 3.8.9
Copyright ©2000 - 2017, vBulletin Solutions, Inc.
Рейтинг@Mail.ru