Форум программистов
 

Восстановите пароль или Зарегистрируйтесь на форуме, о проблемах и с заказом рекламы пишите сюда - alarforum@yandex.ru, проверяйте папку спам!

Вернуться   Форум программистов > C/C++ программирование > Общие вопросы C/C++
Регистрация

Восстановить пароль
Повторная активизация e-mail

Купить рекламу на форуме - 42 тыс руб за месяц

Ответ
 
Опции темы Поиск в этой теме
Старый 22.03.2013, 20:12   #21
BDA
МегаМодератор
СуперМодератор
 
Аватар для BDA
 
Регистрация: 09.11.2010
Сообщений: 7,289
По умолчанию

Попробуйте:
Код:
#include <iostream>
using namespace std;
 
int
main()
{
    unsigned x, f, r = 0, c, i, Sum;
    while ((cin >> x) && x) {
        ++r;
        f = x;
        if (f == 1)
            cout << "Case " << r << ": 2" << endl;
        else {
            for (c = 1, i = 2; !(x % i); x /= i, c *= i) {}
            Sum = (c > 1) ? c : 0;
            for (i = 3; i * i <= x; i += 2) {
                for (c = 1; !(x % i); x /= i, c *= i) {}
                Sum += (c > 1) ? c : 0;
            } 
            Sum += (x > 1) ? x : 0;
            Sum += (Sum == f);
            cout << "Case " << r << ": " << Sum << endl;
        }
    }
    return EXIT_SUCCESS;
}
Только не понял, зачем прибавлять единицу к сумме.
Пишите язык программирования - это форум программистов, а не экстрасенсов. (<= это подпись )

Последний раз редактировалось BDA; 22.03.2013 в 20:34.
BDA вне форума Ответить с цитированием
Старый 23.03.2013, 02:04   #22
akademochka
Пользователь
 
Регистрация: 06.11.2011
Сообщений: 44
По умолчанию

Например, если берем 5: 1 и 5 в результате
1+5=6
akademochka вне форума Ответить с цитированием
Старый 23.03.2013, 02:11   #23
akademochka
Пользователь
 
Регистрация: 06.11.2011
Сообщений: 44
По умолчанию

Огромное спасибо! Засчитало! Я вас уже задолбала, а начиналось все с произведения простых чисел)))
Но вопрос: почему предыдущий вариант программы долго работал?

Последний раз редактировалось akademochka; 23.03.2013 в 02:14.
akademochka вне форума Ответить с цитированием
Старый 23.03.2013, 02:41   #24
BDA
МегаМодератор
СуперМодератор
 
Аватар для BDA
 
Регистрация: 09.11.2010
Сообщений: 7,289
По умолчанию

Пожалуйста.
Потому что делалась лишняя работа. Если ф равно 1, и надпись уже выведена, то зачем производить расчёт сум?
Некоторые оптимизации:
Чем меньше if, тем лучше.
Тернарный оператор, возможно, быстрее, чем if.
Цикл через 2 числа, быстрее цикла по всем числам.
Цикл for, возможно, быстрее цикла while.
Кстати, какое теперь время?
Пишите язык программирования - это форум программистов, а не экстрасенсов. (<= это подпись )
BDA вне форума Ответить с цитированием
Старый 23.03.2013, 12:13   #25
akademochka
Пользователь
 
Регистрация: 06.11.2011
Сообщений: 44
По умолчанию

Среднее время выполнения: 0.015 секунды
Максимальное время выполнения: 0.015 секунды из 1 секунда, 1.5%
akademochka вне форума Ответить с цитированием
Ответ


Купить рекламу на форуме - 42 тыс руб за месяц



Похожие темы
Тема Автор Раздел Ответов Последнее сообщение
ЦИКЛЫ (паскаль) - представить N в виде суммы факториалов натуральных чисел, содержащей наименьшее число слагаемых Katya20 Помощь студентам 7 09.01.2012 01:21
Можно ли число N представить в виде сумы двух квадратов натуральных чисел? Dima170792 Помощь студентам 2 24.06.2011 08:53
всякое целое число можно представить в виде трех простых stasey91 Помощь студентам 3 14.04.2011 21:44
Дано натуральное число n. Можно ли представить его в виде суммы двух квадратов натуральных чисел? Сеня Помощь студентам 3 29.01.2009 01:17