Форум программистов
 
Контакты: о проблемах с регистрацией, почтой и по другим вопросам пишите сюда - alarforum@yandex.ru, проверяйте папку спам! Обязательно пройдите активизацию e-mail.

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

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


Ответ
 
Опции темы
Старый 22.03.2013, 20:12   #21
BDA
Модератор
Заслуженный модератор
 
Аватар для BDA
 
Регистрация: 09.11.2010
Адрес: RF Moscow
Сообщений: 5,378
Репутация: 2468

icq: 438888048
По умолчанию

Попробуйте:
Код:

#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
Репутация: 10
По умолчанию

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

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

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

icq: 438888048
По умолчанию

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

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

Опции темы

Ваши права в разделе
Вы не можете создавать новые темы
Вы не можете отвечать в темах
Вы не можете прикреплять вложения
Вы не можете редактировать свои сообщения

BB коды Вкл.
Смайлы Вкл.
[IMG] код Вкл.
HTML код Выкл.

Быстрый переход

Похожие темы
Тема Автор Раздел Ответов Последнее сообщение
ЦИКЛЫ (паскаль) - представить 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 02:17


18:08.


Powered by vBulletin® Version 3.8.8 Beta 2
Copyright ©2000 - 2018, Jelsoft Enterprises Ltd.

RusProfile.ru


Справочник российских юридических лиц и организаций.
Проекты отопления, пеллетные котлы, бойлеры, радиаторы
интернет магазин respective.ru