Столкнулся с этой задачей еще давно и так и не дает покоя. Понятно, что циклом решить это затратно по времени, но я нашел и другой выход – арифметическая прогрессия, но тут начало не с 1, а с произвольного элемента, так что тут стандартной формулой не получится.
Конкретизирую вопрос:
Как математически посчитать сумму например от 47 до 72, т.е. 47 + 48+ 49 … + 72 ?
-
Вопрос заданболее трёх лет назад
-
27744 просмотра
Стандартной формулой тут получится.
S = (a1+an)*n/2, где a1 — первый член, an — последний, n — количество членов последовательности
Имеем (47+72)*26/2 = 1547
Итого ваша формула: S = (a+b)(b-a+1)/2
Пригласить эксперта
result = ((b+1)*b-(a-1)*a) div 2;
a=1 b=100 result=5050 (именно столько и должно быть, а не 1050)
a=2 b=5 result=14 (2+3+4+5=14)
a=5 b=10 result=45 (5+6+7+8+9+10=45)
Как математически посчитать сумму например от 47 до 72, т.е. 47 + 48+ 49 … + 72 ?
Высчитать сумму первых 72 членов арифметической прогрессии и вычесть из нее сумму первых 46 членов арифметической прогрессии.
-
Показать ещё
Загружается…
26 мая 2023, в 00:11
3000 руб./за проект
26 мая 2023, в 00:08
2500 руб./за проект
26 мая 2023, в 00:05
5000 руб./за проект
Минуточку внимания
Онлайн калькулятор поможет найти сумму чисел от M до N, определит сумму чисел на промежутке от N1 до N2, найти сумму ряда натуральных чисел в указанном интервале.
Для нахождения суммы чисел от А до Б используется формула: (a+b)×(b-a+1)/2
a — наименьшее число ряда;
b — наибольшее число ряда.
×
Пожалуйста напишите с чем связна такая низкая оценка:
×
Для установки калькулятора на iPhone — просто добавьте страницу
«На главный экран»
Для установки калькулятора на Android — просто добавьте страницу
«На главный экран»
Смотрите также
Помогаю со студенческими работами здесь
Вычислить сумму квадратов всех целых чисел от А до 50
Написать программу которая вычисляет сумму квадратов всех целых чисел от а до 50 (значение а…
Вычислить и отобразить сумму всех целых чисел
Помогите, пожалуйста, решить задачу по программирования на языке C++.
Напишите программу, которая…
Вычислить сумму всех натуральных чисел, лежащих в отрезке [a;b], где a, b — вещественные положительные числа, задаваемые пользователем (a < b)
Вычислить сумму всех натуральных чисел, лежащих в отрезке , где a, b — вещественные положительные…
Вычислить сумму всех целых чисел во введенной строке
написать программу, которая вычисляет сумму всех целых чисел во введенной строке. плиз…
Искать еще темы с ответами
Или воспользуйтесь поиском по форуму:
2
Improve Article
Save Article
Like Article
Improve Article
Save Article
Like Article
Given N ranges of the form [L, R], the task is to find the sum of all integers that lie in any of the given ranges.
Examples:
Input: arr[] = {{1, 5}, {3, 7}}, N = 2
Output: 28
Explanation: The set of integers that exist in one or more ranges is {1, 2, 3, 4, 5 , 6, 7}. Hence their sum is 28.Input: ranges[] = {{-12, 15}, {3, 9}, {-5, -2}, {20, 25}, {16, 20}}
Output: 247
Approach: The given problem can be solved by an approach similar to the Merge Overlapping Intervals problem. Below are the steps to follow:
- Sort the intervals based on increasing order of L.
- Push the first interval onto a stack and for each interval do the following:
- If the current interval does not overlap with the stack top, push it.
- If the current interval overlaps with stack top and right end of the current interval is more than that of stack top, update stack top with the value of right end of current interval.
- After traversing through all intervals, the remaining stack contains the merged intervals. The sum of the merged intervals can be calculated using formula for the sum of an Arithmetic Progression as the range [L, R] forms an AP with a common difference as 1 and the number of elements as R – L + 1. The sum is ((L + R)*(R-L+1))/2.
Below is the implementation of the above approach:
C++
#include <bits/stdc++.h>
#define ll long long
using
namespace
std;
ll sumInRange(
long
L,
long
R)
{
ll Sum = ((R - L + 1) / 2)
* (2 * L + (R - L));
return
Sum;
}
ll calcSum(vector<pair<
long
,
long
> > data,
int
n)
{
sort(data.begin(), data.end());
int
i, idx = 0;
for
(i = 1; i < n; i++) {
if
((data[idx].second >=
data[i].first)
|| (data[i].first ==
data[idx].second + 1)) {
data[idx].second
= max(data[idx].second,
data[i].second);
}
else
{
idx++;
data[idx].second = data[i].second;
data[idx].first = data[i].first;
}
}
ll Sum = 0;
for
(i = 0; i <= idx; i++) {
Sum += sumInRange(data[i].first,
data[i].second);
}
return
Sum;
}
int
main()
{
vector<pair<
long
,
long
> > vec
= { { -12, 15 },
{ 3, 9 },
{ -5, -2 },
{ 20, 25 },
{ 16, 20 } };
cout << calcSum(vec, vec.size());
return
0;
}
Java
import
java.util.*;
class
GFG
{
static
int
sumInRange(
int
L,
int
R)
{
int
Sum = ((R - L +
1
) /
2
)
* (
2
* L + (R - L));
return
Sum;
}
static
int
calcSum(
int
[][]data,
int
n)
{
Arrays.sort(data,(a,b)->{
return
a[
0
]-b[
0
];
});
int
i, idx =
0
;
for
(i =
1
; i < n; i++) {
if
((data[idx][
1
] >=
data[i][
0
])
|| (data[i][
0
] ==
data[idx][
1
] +
1
)) {
data[idx][
1
]
= Math.max(data[idx][
1
],
data[i][
1
]);
}
else
{
idx++;
data[idx][
1
] = data[i][
1
];
data[idx][
0
] = data[i][
0
];
}
}
int
Sum =
0
;
for
(i =
0
; i <= idx; i++) {
Sum += sumInRange(data[i][
0
],
data[i][
1
]);
}
return
Sum;
}
public
static
void
main(String[] args)
{
int
[][]vec
= { { -
12
,
15
},
{
3
,
9
},
{ -
5
, -
2
},
{
20
,
25
},
{
16
,
20
} };
System.out.print(calcSum(vec, vec.length));
}
}
Python3
def
sumInRange(L, R):
Sum
=
((R
-
L
+
1
)
/
/
2
)
*
(
2
*
L
+
(R
-
L))
return
Sum
def
calcSum(data,
n):
data.sort()
idx
=
0
for
i
in
range
(
1
, n):
if
((data[idx][
1
] >
=
data[i][
0
])
or
(data[i][
0
]
=
=
data[idx][
1
]
+
1
)):
data[idx][
1
]
=
max
(data[idx][
1
],
data[i][
1
])
else
:
idx
+
=
1
data[idx][
1
]
=
data[i][
1
]
data[idx][
0
]
=
data[i][
0
]
Sum
=
0
for
i
in
range
(idx
+
1
):
Sum
+
=
sumInRange(data[i][
0
],
data[i][
1
])
return
Sum
if
__name__
=
=
"__main__"
:
vec
=
[[
-
12
,
15
],
[
3
,
9
],
[
-
5
,
-
2
],
[
20
,
25
],
[
16
,
20
]]
print
(calcSum(vec,
len
(vec)))
C#
using
System;
using
System.Collections;
using
System.Collections.Generic;
using
System.Globalization;
class
GFG {
public
static
void
Sort<T>(T[][] data,
int
col)
{
Comparer<T> comparer = Comparer<T>.Default;
Array.Sort<T[]>(data, (x,y) => comparer.Compare(x[col],y[col]));
}
public
static
int
sumInRange(
int
L,
int
R)
{
int
Sum = ((R - L + 1) / 2) * (2 * L + (R - L));
return
Sum;
}
public
static
int
calcSum(
int
[][] data,
int
n)
{
Sort<
int
>(data, 0);
int
i = 0;
int
idx = 0;
for
(i = 1; i < n; i++) {
if
((data[idx][1] >= data[i][0]) || (data[i][0] == data[idx][1] + 1)) {
data[idx][1] = Math.Max(data[idx][1], data[i][1]);
}
else
{
idx++;
data[idx][1] = data[i][1];
data[idx][0] = data[i][0];
}
}
int
Sum = 0;
for
(i = 0; i <= idx; i++) {
Sum += sumInRange(data[i][0], data[i][1]);
}
return
Sum;
}
static
void
Main() {
int
[][] vec =
new
int
[][] {
new
int
[] {-12, 15},
new
int
[] {3, 9 },
new
int
[] {-5, -2 },
new
int
[] {20, 25},
new
int
[] {16, 20}
};
Console.WriteLine(calcSum(vec, vec.Length));
}
}
Javascript
<script>
function
sumInRange(L, R) {
let Sum = ((R - L + 1) / 2)
* (2 * L + (R - L));
return
Sum;
}
function
calcSum(data, n) {
data.sort(
function
(a, b) {
return
a.first - b.first })
let i, idx = 0;
for
(i = 1; i < n; i++) {
if
((data[idx].second >=
data[i].first)
|| (data[i].first ==
data[idx].second + 1)) {
data[idx].second
= Math.max(data[idx].second,
data[i].second);
}
else
{
idx++;
data[idx].second = data[i].second;
data[idx].first = data[i].first;
}
}
let Sum = 0;
for
(i = 0; i <= idx; i++) {
Sum += sumInRange(data[i].first,
data[i].second);
}
return
Sum;
}
let vec
= [{ first: -12, second: 15 },
{ first: 3, second: 9 },
{ first: -5, second: -2 },
{ first: 20, second: 25 },
{ first: 16, second: 20 }];
document.write(calcSum(vec, vec.length));
</script>
Time Complexity: O(N*log N)
Auxiliary Space: O(1)
Last Updated :
08 Feb, 2023
Like Article
Save Article
Как найти сумму чисел между a и b (вводятся с клавиатуры)? Вот моё решение:
#include <iostream>
using namespace std;
int main()
{
int a, b;
cin >> a >> b;
int sum = 0;
for (int i = a; i < b; i++)
{
a = a + 1;
sum = sum + a;
}
cout << sum;
}
Пожалуйста, укажите на ошибку. Например, при вводе 5 и 8 выдаёт 21, а должно 13.
UPD:
#include <iostream>
using namespace std;
int main()
{
int a, b;
cin >> a >> b;
int sum = 0;
while (a < b - 1)
{
a = a + 1;
sum = sum + a;
}
cout << sum;
}
Kromster
13.5k12 золотых знаков43 серебряных знака72 бронзовых знака
задан 6 ноя 2013 в 15:46
11
Ошибка в том, что циклы для вашей задачи не нужны. Ответ находится одной формулой (b - a - 1) * (a + b) / 2
.
ответ дан 6 ноя 2013 в 16:17
dzhioevdzhioev
11.6k24 серебряных знака38 бронзовых знаков
3
#include <iostream>
using namespace std;
int main()
{
int a, b;
cin >> a >> b;
int sum = 0;
for (int i = a + 1; i < b; i++)
{
sum = sum + i;
}
cout << sum;
}
ответ дан 15 ноя 2013 в 19:19