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

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

Восстановить пароль Регистрация
 
xexew
0 / 0 / 0
Регистрация: 22.02.2011
Сообщений: 76
13.10.2011, 22:36     Совершенные числа #1
Вводится число 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 << " ";
                
            }           
    }
}
Выводит только бОльшее совершенное число, помогите пожалуйста, скажите, как доработать программу что бы выводил все совершенные числа.
Similar
Эксперт
41792 / 34177 / 6122
Регистрация: 12.04.2006
Сообщений: 57,940
13.10.2011, 22:36     Совершенные числа
Посмотрите здесь:

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

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

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

cтранно работает программа, если ввести 30 то она выведет 28, а если 100 то не выведет
Dani
1263 / 621 / 50
Регистрация: 11.08.2011
Сообщений: 2,236
Записей в блоге: 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");
}
Yandex
Объявления
13.10.2011, 23:01     Совершенные числа
Ответ Создать тему
Опции темы

Текущее время: 04:34. Часовой пояс GMT +3.
КиберФорум - форум программистов, компьютерный форум, программирование
Powered by vBulletin® Version 3.8.9
Copyright ©2000 - 2016, vBulletin Solutions, Inc.
Рейтинг@Mail.ru