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

Поиск совершенного числа в массиве - C++

Войти
Регистрация
Восстановить пароль
Другие темы раздела
C++ Считать длину строки текстового файла http://www.cyberforum.ru/cpp-beginners/thread1031583.html
Есть квадратная матрица, которая заполняется данными из файла. Если размерность матрицы больше, чем объём данных в файле, то нужно заполнить недостающие элементы матрицы случайными числами. Пытаюсь сделать так:cout<<"Введите размерность квадартной матрицы: "; cin>>s; int **mas = new int*; ifstream fs; fs.open("input.txt"); int a = fs.getline; if(s > a){ for(i = a + 1; i < s; i++)
C++ Где ошибка? Вот условие -"Ученик на свой ​​день рождения раздал ученикам класса конфеты, в том числе и себе. Ребятам давал четное количество, а девушкам нечетное количество. Подсчитать количество девушек и парней в классе. Формат входных данных Первая строка содержит общее количество учащихся, натуральное число N. В следующих строках количество розданных конфет. Все числа входного файла не превышают 1... http://www.cyberforum.ru/cpp-beginners/thread1031567.html
C++ Посчитать произведение положительных элементов в двумерном массиве
Народ, помогите сделать задание. Посчитать произведение положительных элементов в тех строках массива, в которых есть хотя бы два положительных элемента. Вывести номер строки и произведение.
C++ Программа для работы с БД, работа программы по сети
Здравствуйте форумчане, прошу помощи в следующей задаче. Я делаю Программу которая работает с БД, и мне бы хотелось организовать её работу по сети, т.е. мне необходимо что бы к базе данных имели доступ пользователи разных компьютеров. Сам я не знаю как такое провернуть, может быть вы мне подскажите какую-либо литературу или поможете мне своими знаниями(если можно подробнее), буду очень благодарен...
C++ Вывод специальных символов unicode в консоль http://www.cyberforum.ru/cpp-beginners/thread1031548.html
Подскажите, товарищи, как можно вывести специальные юникод символны в консоль? (например ☭ ±). Всё перепробовал, ответа так и не получил.
C++ Очистка буфера kbhit() Доброго времени суток! Вопрос в следующем. Как очистить буфер функции kbhit? Код такого рода: while (exit==0) { if (kbhit()) { switch (getch()) { ... подробнее

Показать сообщение отдельно
katsidelin
60 / 21 / 2
Регистрация: 15.11.2013
Сообщений: 112
Записей в блоге: 3
07.12.2013, 17:45     Поиск совершенного числа в массиве
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
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
// [url]http://www.cyberforum.ru/cpp-beginners/thread1031605.html[/url]
// [url]http://ru.wikipedia.org/wiki/%D0%A1%D0%BE%D0%B2%D0%B5%D1%80%D1%88%D0%B5%D0%BD%D0%BD%D0%BE%D0%B5_%D1%87%D0%B8%D1%81%D0%BB%D0%BE[/url]
 
#include <iostream>
 
 
using namespace std;
 
int main(void)
{
    /* +++++++++++++++++++++++++++++++ */ // Телепаты гадают что тут.
 
    const long int mas[17] = {1, 6, 40, 496, 1000, 8128, 8200, 9000, 33550336, 33550337, 8589869056, 8789869056, \
                              137438691328, 2305843008139952128, 2305843008139952129}; // 16 элементов для начала. 0-15.
//    long int **dividends = new long int*; // Массив делителей.
    long int szCountDividends = 0; // Счётчик числа делителей в массиве.
    long int szSumDividends = 0; // Сумма всех делителей.
 
    /* +++++++++++++++++++++++++++++++ */
    int n1 = 0, n2 = 0;
    do
    {
        //задаём диапазон исследуемых элементов
        cout<<"Введите n1 = ";
        cin>>n1;
        if ( n1 >= 0 && n1 <= 15 )
        {
            cout<<"Введите n2 = ";
            cin>>n2;
 
            if ( n2 < 0 || n2 > 15 )
            {
                 cerr << "n2 вышло за пределы массива! Пробуем занова!" << endl;
            };
        }
        else
        {
            cerr << "n1 вышло за пределы массива! Пробуем занова!" << endl;
        };
        if (n1>n2) cerr <<"n1 должно быть меньше n2!"<<endl;
    } while ( n1 < 0 || n1 > 15 || n2 < 0 || n2 > 15 || n1 > n2 );
 
    //находим совершенные числа
 
 
 
 
        long int x,i,j,p;
        for(i = mas[n1]; i <= mas[n2]; n1++){
            x = i;
            for(j = 1; j < x; j++){
                if(x % j == 0)
                    p+=j;
            }
            if(p == i)
                cout<< "Число " << i << " совершенное\n";
            p = 0;i++;
        }
 
 
 
    return 0;
}
 
/*
 * Совершенное числоМЃ (др.-греч. бјЂПЃО№ОёОјбЅёП‚ П„О*О»ОµО№ОїП‚) — натуральное число, равное сумме всех своих собственных делителей
 * (т. е. всех положительных делителей, отличных от самогоМЃ числа). По мере того как натуральные числа возрастают,
 *  совершенные числа встречаются всё реже.
 *
 * Совершенные числа образуют последовательность:
 *
 *   6, 28, 496, 8128, 33550336, 8589869056, 137438691328,
 *   2305843008139952128, 2658455991569831744654692615953842176,
 *   191561942608236107294793378084303638130997321548169216, … (последовательность A000396 в OEIS).
 */
Уже кое-что, но конца и края нет вычислениям.
Попробуй поправить мой код. Кстати, ты забыл прирастить i в массиве -
C++
1
i++;


Добавлено через 1 минуту
Bash
1
2
  PID USER      PR  NI    VIRT    RES    SHR S %CPU %MEM     TIME+ COMMAND                                                   
 5917 user      20   0   12508   1020    868 R 95,6  0,0   2:34.25 p2
Программа явно не может остановиться и кушает системные ресурсы.
Пока теряюсь в догадках...

Добавлено через 9 минут
PureBasic
1
2
3
$ ./p2
Введите n1 = 7
Введите n2 = 8
Понял.
Программа работает верно.
Просто совершенные числа на столько редкие, что мощности моего процессора amd athlon 3200 не хватает для быстрого поиска.
 
КиберФорум - форум программистов, компьютерный форум, программирование
Powered by vBulletin® Version 3.8.9
Copyright ©2000 - 2017, vBulletin Solutions, Inc.
Рейтинг@Mail.ru