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

Поиск совершенного числа N через цикл for - C++

Войти
Регистрация
Восстановить пароль
Другие темы раздела
C++ Вычисление стоимости покупки с учетом скидки http://www.cyberforum.ru/cpp-beginners/thread34238.html
Написать программу вычисления стоимости покупки с учетом скидки. Скидка 5% предоставляется если сумма больше 1000 рублей, 7% если сумма больше 1500 рублей. Написать программу вычисления стоимости...
C++ Заполнение двумерных символьных массивов Помогите пожалуйста в учебниках про строки вообще мало что пишут, как заполнять массив из нескольких строк, с клавиатуры. Без методов класса, желательно с помощью функции gets(), в конкретном... http://www.cyberforum.ru/cpp-beginners/thread34232.html
Возвращаемое значение функции C++
Здарвствуйте. Моя задача состоит в написании следующей программы: вычислить среднее арифметическое значение элементов матрицы W(L,L), расположенных слева и справа от двух диагоналей. Эта программа...
C++ Реализация программы
#include <iostream> #include <algorithm> #include <numeric> int main() { using namespace std; srand((unsigned)time(NULL)); const int N = 1000; int a;
C++ Общий наибольщий делитель в одномерном массиве http://www.cyberforum.ru/cpp-beginners/thread34168.html
дано: найти общий наибольщий делитель в одномерном массиве ( в массиве все элементы положительны). help me please!
C++ класс Множество помогите решить пожалуйста...исжу на экзамене...требуется срочная помощь Разработайте класс Множество.Класс должен содержать элементы множества как закрытые члены,неявный конструктор,конструктор с... подробнее

Показать сообщение отдельно
valeriikozlov
Эксперт C++
4670 / 2496 / 321
Регистрация: 18.08.2009
Сообщений: 4,550
18.01.2011, 22:11
Русдеч, Если заинтересует, я когда-то решал такую задачу:
Совершенные числа
(Время: 1 сек. Память: 16 Мб Сложность: 51%)
Число называется совершенным, если оно равно сумме всех своих делителей, меньших его самого. Требуется найти все совершенные числа от M до N.
Входные данные

Входной файл INPUT.TXT содержит числа M и N, разделенные пробелом. (1 <= M <= N <= 5*10^18)
Выходные данные

В выходной файл OUTPUT.TXT выведите по одному числу в строке в порядке возрастания все совершенные числа, находящихся на отрезке [M, N]. В том случае, когда таких чисел нет следует вывести «Absent».
Вот код:
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 <stdio.h>
#include <math.h>
 
int main()
{
    int mas[8]={2, 3, 5, 7, 13, 17, 19, 31};
    long M, N, temp;
    int fl=1, i, fl1=0;
//    freopen("input.txt","r",stdin);
//    freopen("output.txt","w",stdout);
    scanf("%ld%ld", &M, &N);
    for(i=0; i<8 && fl; i++)
    {
        temp=long(pow((double)2,(double) mas[i]-1)*(pow((double)2,(double)mas[i])-1));
        if(temp>=M && temp<=N)
        {
            printf("%ld\n", temp);
            fl1=1;
        }
        if(temp>N)
            fl=0;
    }
    if(!fl1){printf("Absent");}
  return 0;
}
Запустите, введите 0 и 5000000000000000000 (5*10^18). Выведет все совершенные числа в этом диапазоне менее чем 1 секунда.
0
 
КиберФорум - форум программистов, компьютерный форум, программирование
Powered by vBulletin® Version 3.8.9
Copyright ©2000 - 2017, vBulletin Solutions, Inc.
Рейтинг@Mail.ru