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

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

Войти
Регистрация
Восстановить пароль
 
 
Рейтинг: Рейтинг темы: голосов - 11, средняя оценка - 4.82
Neoks
0 / 0 / 0
Регистрация: 31.07.2014
Сообщений: 8
#1

Найти все совершенные числа от M до N - C++

02.08.2014, 21:01. Просмотров 1776. Ответов 21
Метки нет (Все метки)

Совершенные числа
(Время: 1 сек. Память: 16 Мб )
Число называется совершенным, если оно равно сумме всех своих делителей, меньших его самого. Требуется найти все совершенные числа от M до N.

Входные данные

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

Выходные данные

В выходной файл 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
#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;
}
Пролетает на 10 тесте, подскажите, где ошибка? Заранее благодарен
0
Надоела реклама? Зарегистрируйтесь и она исчезнет полностью.
Similar
Эксперт
41792 / 34177 / 6122
Регистрация: 12.04.2006
Сообщений: 57,940
02.08.2014, 21:01
Здравствуйте! Я подобрал для вас темы с ответами на вопрос Найти все совершенные числа от M до N (C++):

Найти все совершенные числа (С++) - C++
Найдите все совершенные числа находящиеся в интервале (900;9000)

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

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

Найти все совершенные числа в заданном интервале - C++
Задача. Натуральное число называется совершенным, если оно равно сумме всех своих простых делителей, например 6 = 1 + 2 + 3. Найти все...

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

Найти и напечатать все совершенные числа в заданном интервале - C++
Число равно сумме своих делителей включая единицу называется совершенных.Найти и напечатать все совершенные числа в интервале от 2 до x.

21
SlavaSSU
216 / 161 / 45
Регистрация: 17.07.2012
Сообщений: 587
03.08.2014, 13:59 #16
Neoks, ох как. как она вообще до 10 теста доходила.

надо так

C++
1
2
3
for(int i = 0; i < 8; i++)
    if(c[i] >= a && c[i] <= b)
        cout << c[i] << ' ';
0
Neoks
0 / 0 / 0
Регистрация: 31.07.2014
Сообщений: 8
03.08.2014, 14:22  [ТС] #17
SlavaSSU, пожалуйста, напишите программу полностью, я не понял
0
SlavaSSU
216 / 161 / 45
Регистрация: 17.07.2012
Сообщений: 587
03.08.2014, 14:30 #18
Neoks,
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
#include <iostream>
#include <fstream>
 
using namespace std;
 
int main ()
{
    long long c[8]={6, 28, 496, 8128, 33550336, 8589869056, 137438691328, 2305843008139952128};
    long long a, b;
    cin >> a >> b;
    bool ok = false;
    for(int i = 0; i < 8; i++)
    {
        if(c[i] >= a && c[i] <= b)
        {
            cout << c[i] << ' ';
            ok = true;
        }
    }
 
    if(!ok)
        cout << "Absent" << endl;
    return 0;
}
0
ValeryS
Модератор
6794 / 5202 / 499
Регистрация: 14.02.2011
Сообщений: 17,453
03.08.2014, 14:42 #19
Цитата Сообщение от SlavaSSU Посмотреть сообщение
C++
1
2
3
4
5
6
7
8
    for(int i = 0; i < 8; i++)
    {
        if(c[i] >= a && c[i] <= b)
        {
            cout << c[i] << ' ';
            ok = true;
        }
    }
так ради прикола
другое решение
C++
1
2
3
4
5
6
7
8
int i = 0;
for (; i < 8 && c[i] < a; i++)
    ;
for (; i < 8 && c[i] <= b; i++)
{
    cout << c[i] << ' ';
    ok = true;
}
0
Neoks
0 / 0 / 0
Регистрация: 31.07.2014
Сообщений: 8
03.08.2014, 15:25  [ТС] #20
SlavaSSU, не проходит по времени
0
SlavaSSU
216 / 161 / 45
Регистрация: 17.07.2012
Сообщений: 587
03.08.2014, 15:29 #21
Neoks, как это может не проходить по времени? там файловый ввод вывод сделай.
0
Vtulhu
371 / 377 / 96
Регистрация: 12.08.2011
Сообщений: 1,610
03.08.2014, 22:07 #22
C
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
int is_perfect(const unsigned long long n)
{
    unsigned long long sum = 1;
    unsigned long long d1 = 2;
    unsigned long long d2 = n / 2;
    while( d1 < d2 ) {
        if( d1 * d2 == n ) {
            sum += d1;
            sum += d2;
        }
        d2 = n / ++d1;
    }
    if( d1 == d2 ) { sum += d1; }
    return sum == n;
}
0
03.08.2014, 22:07
MoreAnswers
Эксперт
37091 / 29110 / 5898
Регистрация: 17.06.2006
Сообщений: 43,301
03.08.2014, 22:07
Привет! Вот еще темы с ответами:

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

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

В цикле вывести на экран все совершенные числа - C++
продолжение того же задания, но уже с дополнением... Создать функцию, которая будет иметь 1-н целочисленный параметр А, и в качестве...

Функции. Получить все совершенные числа меньше заданного - C++
Условие в названии темы. Помогите доработать (нужно передать само число &quot;с&quot; в функцию). Код: #include &lt;iostream&gt; using...


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

Или воспользуйтесь поиском по форуму:
22
Ответ Создать тему
Опции темы

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