Форум программистов, компьютерный форум, киберфорум
С++ для начинающих
Войти
Регистрация
Восстановить пароль
Блоги Сообщество Поиск Заказать работу  
 
Рейтинг 4.86/7: Рейтинг темы: голосов - 7, средняя оценка - 4.86
Ghost
 Аватар для Belfegor
174 / 174 / 40
Регистрация: 16.09.2012
Сообщений: 526

Вычислить сумму ряда

25.07.2013, 14:25. Показов 1469. Ответов 17
Метки нет (Все метки)

Студворк — интернет-сервис помощи студентам
По заданным числам n и a вычислить значение суммы: https://www.cyberforum.ru/cgi-bin/latex.cgi?\sum_{i=1}^{n}i*a^i


C++
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
#include <iostream>
#include <cmath>
#define ll long long
 
inline ll binpow(ll x, ll n) {
    ll res = 1;
    while (n) {
        if (n & 1)res *= x;
        x *= x;
        n >>= 1;
    }
    return res;
}
 
int main() {
    ll n, a, s = 0;
    std::cin >> n >> a;
    for (ll i = 1; i <= n; i++) {
        s += i * binpow(a, i);
    }
    std::cout << abs(s) << std::endl;
    return 0;
}
вроде правильно, а проходит на 53%, где я туплю?
0
Programming
Эксперт
39485 / 9562 / 3019
Регистрация: 12.04.2006
Сообщений: 41,671
Блог
25.07.2013, 14:25
Ответы с готовыми решениями:

Вычислить сумму ряда. Где-то напутал знаки или формула ряда не правильная. Посмотрите свежим взглядом.
Привет! Пишу простую контрольную, не могу понять, то ли я где-то со знаками туплю, то ли формула не корректна. Задание: Мое...

Вычислить сумму четных и сумму нечетных чисел натурального ряда от 1 до n
18 задача 1 лаба После удара о поверхность Земли мяч движется вертикально вверх со скорость 15 м\с. Найдите координату мяча над...

Вычислить сумму четных и сумму нечетных чисел натурального ряда от 1 до N
Вычислить сумму четных и сумму нечетных чисел натурального ряда от 1 до N. Не могу найти где ошибка ? #include &lt;iostream&gt; ...

17
 Аватар для Fintt
10 / 10 / 2
Регистрация: 13.02.2012
Сообщений: 94
25.07.2013, 14:28
Извиняюсь я написал не то, я не так понял.
0
Ghost
 Аватар для Belfegor
174 / 174 / 40
Регистрация: 16.09.2012
Сообщений: 526
25.07.2013, 14:37  [ТС]
Цитата Сообщение от Fintt Посмотреть сообщение
мб &&?


Добавлено через 8 минут

Не по теме:

где Thinker, когда он нужен

0
Эксперт по математике/физикеЭксперт С++
 Аватар для Ilot
2222 / 1424 / 419
Регистрация: 16.05.2013
Сообщений: 3,642
Записей в блоге: 6
25.07.2013, 15:38
Немного подковырял код:
C++
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
#include<iostream>
#include<cmath>
double binpow(double x, int n) {
    while (--n) 
        x *= x;
    return x;
}
int main() {
    double a, s = 0;
    int n;
    std::cin >> n >> a;
    for (int i = 1; i <= n; i++) 
        s += i * binpow(a, i);
    std::cout << abs(s) << std::endl;
    system("pause");
    return 0;
}
Хотя я бы рекомендовал информировать пользователя какие конкретно переменные необходимо ввести.
Надеюсь нигде не ошибся. Вопросы?

Добавлено через 10 минут
n >>= 1;
Это как я понимаю должен быть декремент?
Если я не ошибаюсь побитовый сдвиг вправо это деление на два. Вы уверены, что он здесь нужен или это просто я не понимаю ваш алгоритм?

Добавлено через 2 минуты
C++
1
(n & 1)
А если n = 3 (двоичный 011)?
0
Ghost
 Аватар для Belfegor
174 / 174 / 40
Регистрация: 16.09.2012
Сообщений: 526
25.07.2013, 16:30  [ТС]
Цитата Сообщение от Ilot Посмотреть сообщение
Хотя я бы рекомендовал информировать пользователя какие конкретно переменные необходимо ввести.
Цитата Сообщение от Belfegor Посмотреть сообщение
проходит на 53%

Не по теме:

это намекает о том, что это олимпиадная задача


Цитата Сообщение от Ilot Посмотреть сообщение
Вы уверены, что он здесь нужен
да
Цитата Сообщение от Ilot Посмотреть сообщение
я не понимаю ваш алгоритм
да

Ваше решение неверно.
0
Эксперт по математике/физикеЭксперт С++
 Аватар для Ilot
2222 / 1424 / 419
Регистрация: 16.05.2013
Сообщений: 3,642
Записей в блоге: 6
25.07.2013, 16:36
Эмм... ради интереса в чем ошибка?
0
Ghost
 Аватар для Belfegor
174 / 174 / 40
Регистрация: 16.09.2012
Сообщений: 526
25.07.2013, 16:44  [ТС]
Цитата Сообщение от Ilot Посмотреть сообщение
Эмм... ради интереса в чем ошибка?
http://ideone.com/Uda7EZ

Не по теме:

n--a----s
3--3----264(должно быть 102)
4--4----262948(должно быть 1252)

0
71 / 71 / 13
Регистрация: 13.05.2012
Сообщений: 130
25.07.2013, 16:51
здесь же правильные результаты выдает
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 <iostream>
#include <cmath>
#define ll long long
 
inline ll binpow(ll x, ll n) {
    ll res = 1;
    while (n) {
        if (n & 1)res *= x;
        x *= x;
        n >>= 1;
    }
    return res;
}
 
int main() {
    ll n, a, s = 0;
    std::cin >> n >> a;
    for (ll i = 1; i <= n; i++) {
        s += i * binpow(a, i);
    }
    long k=s;
    std::cout << abs(k) << std::endl;
    system("pause");
    return 0;
}
0
Эксперт по математике/физикеЭксперт С++
 Аватар для Ilot
2222 / 1424 / 419
Регистрация: 16.05.2013
Сообщений: 3,642
Записей в блоге: 6
25.07.2013, 16:53
А... ну делов-то:
C++
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
#include<iostream>
#include<cmath>
double binpow(double x, int n) {
    double res = x;
    while (--n) 
        res *= x;
    return res;
}
int main() {
    double a, s = 0;
    int n;
    std::cin >> n >> a;
    for (int i = 1; i <= n; i++) 
        s += i * binpow(a, i);
    std::cout << abs(s) << std::endl;
    system("pause");
    return 0;
}
0
_
317 / 151 / 27
Регистрация: 08.10.2011
Сообщений: 432
25.07.2013, 17:05
C++
1
2
3
4
5
6
7
8
9
10
11
12
13
14
#include <iostream>
using namespace std;
 
int main()
{
    int a, n, sum = 0, x = 1;
 
    cin >> n >> a;
    for ( int i = 1; i <= n; ++i )
        sum += ( x *= a ) * i;
    cout << sum << endl;
 
    return 0;
}
0
Ghost
 Аватар для Belfegor
174 / 174 / 40
Регистрация: 16.09.2012
Сообщений: 526
25.07.2013, 17:19  [ТС]
Цитата Сообщение от Valentina Посмотреть сообщение
здесь же правильные результаты выдает
Цитата Сообщение от Belfegor Посмотреть сообщение
проходит на 53%
ya_noob, тоже самое...
0
_
317 / 151 / 27
Регистрация: 08.10.2011
Сообщений: 432
25.07.2013, 17:32
Цитата Сообщение от Belfegor Посмотреть сообщение
По заданным числам n и a вычислить значение суммы
а какие диапазоны допустимых значений для n и a?
0
Эксперт по математике/физикеЭксперт С++
 Аватар для Ilot
2222 / 1424 / 419
Регистрация: 16.05.2013
Сообщений: 3,642
Записей в блоге: 6
25.07.2013, 17:55
А ряд таки легко суммируется: производная от геометрической прогрессии. выхожу с телефона формулу написать сложно, но думаю для вас это не составит труда. удачи
0
Ghost
 Аватар для Belfegor
174 / 174 / 40
Регистрация: 16.09.2012
Сообщений: 526
25.07.2013, 18:17  [ТС]
Цитата Сообщение от ya_noob Посмотреть сообщение
а какие диапазоны допустимых значений для n и a?
Два натуральных числа n и a.
сумма не превышает 10^18
0
_
317 / 151 / 27
Регистрация: 08.10.2011
Сообщений: 432
25.07.2013, 18:39
Цитата Сообщение от Belfegor Посмотреть сообщение
Два натуральных числа n и a.
сумма не превышает 10^18
тут надо формулу для суммы ряда найти, а иначе вы по времени не влезете. попробуйте такой тест: 950000000 1
0
1406 / 648 / 135
Регистрация: 11.08.2011
Сообщений: 2,299
Записей в блоге: 2
25.07.2013, 19:26
Belfegor, чтобы найти степень a^i, где нужны все степени от a^1 до a^i, можно провернуть за O(i), а ты вкрутил никому не нужный бинпоиск, теперь сложность накручивается на логарифм за каждую итерацию. К примеру такой код свалился лишь на 1 тесте по времени:
C++
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
    #include <iostream>
 
    int main()
    {
        unsigned __int64 result = 0, power;
        int n, a;
        std::cin >> n >> a;
        power = 1;
        for (int i = 1; i<=n; ++i)
        {
            power *= a;
            result += i * power;
        }
        std::cout << result << std::endl;
    }
Добавлено через 19 минут
И вообще, долго работать программа может только если a = 1, поэтому нужно просто заифить этот случай и найти ответ при помощи формулы суммы арифметической прогрессии. Этот код берет 100%:
C++
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
#include <iostream>
 
int main()
 {
    unsigned __int64 result = 0, power;
    unsigned __int64 n, a;
    std::cin >> n >> a;
    power = 1;
    if (a == 1)
    {
        std::cout << unsigned __int64(((n/2.0 + 0.5)*n)) << std::endl;
        return 0;
    }
    for (unsigned __int64 i = 1; i<=n; ++i)
    {
        power *= a;
        result += i * power;
    }
    std::cout << result << std::endl;
 }
2
Эксперт С++
 Аватар для Thinker
4267 / 2241 / 203
Регистрация: 26.08.2011
Сообщений: 3,802
Записей в блоге: 5
25.07.2013, 20:31
используя технику производящих функций, получаем (при a != 1):
https://www.cyberforum.ru/cgi-bin/latex.cgi?\sum_{i=1}^nia^i = \frac{a(na(a-1)a^{n-1} - a^{n}+1)}{(a-1)^2}

при a = 1 отдельный случай:
https://www.cyberforum.ru/cgi-bin/latex.cgi?\sum_{i=1}^nia^i = \frac{n(n+1)}{2}

используя бинарное возведение в степень, получаем алгоритм логарифмической сложности.
2
Эксперт по математике/физикеЭксперт С++
 Аватар для Ilot
2222 / 1424 / 419
Регистрация: 16.05.2013
Сообщений: 3,642
Записей в блоге: 6
26.07.2013, 08:08
Thinker, я об этом и говорил
0
Надоела реклама? Зарегистрируйтесь и она исчезнет полностью.
inter-admin
Эксперт
29715 / 6470 / 2152
Регистрация: 06.03.2009
Сообщений: 28,500
Блог
26.07.2013, 08:08
Помогаю со студенческими работами здесь

Вычислить сумму ряда
Дaно нaтуpaльно число А и целое число N (N&gt;0). Используя один цикл, найти выражение 1-A+A2-A3+...+(-1n)*An. Условный оператор не...

Вычислить сумму ряда
Помогите,пожалуйста,напишите прогу на C++ Даны действительное число a, натуральное число n. Вычислить...

Вычислить сумму ряда
Помогите составить программу для этого задания &quot;Программирование алгоритмов циклической структуры с заданным числом повторений&quot;

Вычислить сумму ряда
Дано натуральное число N. Вычислить:

Вычислить сумму ряда
Добрый вечер. Ребята, помогите пожалуйста записать формулу в С++. Программа сама то написана, а вот формулу никак не получается вывести.


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

Или воспользуйтесь поиском по форуму:
18
Ответ Создать тему
Новые блоги и статьи
PhpStorm 2025.3: WSL Terminal всегда стартует в ~
and_y87 14.12.2025
PhpStorm 2025. 3: WSL Terminal всегда стартует в ~ (home), игнорируя директорию проекта Симптом: После обновления до PhpStorm 2025. 3 встроенный терминал WSL открывается в домашней директории. . .
Как объединить две одинаковые БД Access с разными данными
VikBal 11.12.2025
Помогите пожалуйста !! Как объединить 2 одинаковые БД Access с разными данными.
Новый ноутбук
volvo 07.12.2025
Всем привет. По скидке в "черную пятницу" взял себе новый ноутбук Lenovo ThinkBook 16 G7 на Амазоне: Ryzen 5 7533HS 64 Gb DDR5 1Tb NVMe 16" Full HD Display Win11 Pro
Музыка, написанная Искусственным Интеллектом
volvo 04.12.2025
Всем привет. Некоторое время назад меня заинтересовало, что уже умеет ИИ в плане написания музыки для песен, и, собственно, исполнения этих самых песен. Стихов у нас много, уже вышли 4 книги, еще 3. . .
От async/await к виртуальным потокам в Python
IndentationError 23.11.2025
Армин Ронахер поставил под сомнение async/ await. Создатель Flask заявляет: цветные функции - провал, виртуальные потоки - решение. Не threading-динозавры, а новое поколение лёгких потоков. Откат?. . .
Поиск "дружественных имён" СОМ портов
Argus19 22.11.2025
Поиск "дружественных имён" СОМ портов На странице: https:/ / norseev. ru/ 2018/ 01/ 04/ comportlist_windows/ нашёл схожую тему. Там приведён код на С++, который показывает только имена СОМ портов, типа,. . .
Сколько Государство потратило денег на меня, обеспечивая инсулином.
Programma_Boinc 20.11.2025
Сколько Государство потратило денег на меня, обеспечивая инсулином. Вот решила сделать интересный приблизительный подсчет, сколько государство потратило на меня денег на покупку инсулинов. . . .
Ломающие изменения в C#.NStar Alpha
Etyuhibosecyu 20.11.2025
Уже можно не только тестировать, но и пользоваться C#. NStar - писать оконные приложения, содержащие надписи, кнопки, текстовые поля и даже изображения, например, моя игра "Три в ряд" написана на этом. . .
Мысли в слух
kumehtar 18.11.2025
Кстати, совсем недавно имел разговор на тему медитаций с людьми. И обнаружил, что они вообще не понимают что такое медитация и зачем она нужна. Самые базовые вещи. Для них это - когда просто люди. . .
Создание Single Page Application на фреймах
krapotkin 16.11.2025
Статья исключительно для начинающих. Подходы оригинальностью не блещут. В век Веб все очень привыкли к дизайну Single-Page-Application . Быстренько разберем подход "на фреймах". Мы делаем одну. . .
КиберФорум - форум программистов, компьютерный форум, программирование
Powered by vBulletin
Copyright ©2000 - 2025, CyberForum.ru