Столкнулся с этой задачей еще давно и так и не дает покоя. Понятно, что циклом решить это затратно по времени, но я нашел и другой выход – арифметическая прогрессия, но тут начало не с 1, а с произвольного элемента, так что тут стандартной формулой не получится.
Конкретизирую вопрос:
Как математически посчитать сумму например от 47 до 72, т.е. 47 + 48+ 49 … + 72 ?
-
Вопрос заданболее трёх лет назад
-
27676 просмотров
Стандартной формулой тут получится.
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 членов арифметической прогрессии.
-
Показать ещё
Загружается…
17 мая 2023, в 00:31
100000 руб./за проект
16 мая 2023, в 23:31
1000 руб./за проект
16 мая 2023, в 22:24
150000 руб./за проект
Минуточку внимания
Онлайн калькулятор поможет найти сумму чисел от M до N, определит сумму чисел на промежутке от N1 до N2, найти сумму ряда натуральных чисел в указанном интервале.
Для нахождения суммы чисел от А до Б используется формула: (a+b)×(b-a+1)/2
a – наименьшее число ряда;
b – наибольшее число ряда.
×
Пожалуйста напишите с чем связна такая низкая оценка:
×
Для установки калькулятора на iPhone – просто добавьте страницу
«На главный экран»
Для установки калькулятора на Android – просто добавьте страницу
«На главный экран»
Смотрите также
Леонид П617
Просто проходил мимо. · 19 февр 2020
Если вы имеете в виду сумму всех натуральных чисел от а до b, то по формуле арифметической прогрессии: S(n)=na+bn(n-1)/2, где b принимается 1.
А если вы имеете в виду сумму всех действительных чисел на отрезке, то не то что посчитать их сумму, но даже определить их количество не представляется возможным.
3,3 K
Комментировать ответ…Комментировать…
Вы знаете ответ на этот вопрос?
Поделитесь своим опытом и знаниями
Войти и ответить на вопрос
скрыт(Почему?)
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
1 / 1 / 0 Регистрация: 26.10.2013 Сообщений: 52 |
|
1 |
|
Найти сумму чисел в интервале30.10.2013, 09:26. Показов 10288. Ответов 5
С клавиатуры вводятся два целых числа, найти сумму всех чисел в интервале этих чисел. Original s klaviatury vvodyatsya dva celyh chisla, naiti summu vseh chisel v intervale etih chisel
0 |
584 / 387 / 216 Регистрация: 20.01.2013 Сообщений: 1,169 |
|
30.10.2013, 09:46 |
2 |
И что не получилось ?
0 |
1 / 1 / 0 Регистрация: 26.10.2013 Сообщений: 52 |
|
30.10.2013, 09:52 [ТС] |
3 |
daaa
0 |
Simak63 30 / 30 / 21 Регистрация: 19.02.2011 Сообщений: 168 |
||||
30.10.2013, 10:11 |
4 |
|||
1 |
0 / 0 / 1 Регистрация: 14.10.2013 Сообщений: 112 |
|
11.05.2014, 20:31 |
5 |
Как можно ускорить такую программу?
0 |
zss Модератор 13085 / 10362 / 6201 Регистрация: 18.12.2011 Сообщений: 27,707 |
||||
11.05.2014, 21:19 |
6 |
|||
Как можно ускорить такую программу?
0 |
IT_Exp Эксперт 87844 / 49110 / 22898 Регистрация: 17.06.2006 Сообщений: 92,604 |
11.05.2014, 21:19 |
Помогаю со студенческими работами здесь Найти сумму таких чисел в интервале [a;b], синус которых больше нуля Найти сумму всех целых чисел на заданном интервале, дающих при делении на 5 в остатке 3 (цикл for) Найти количество чисел в интервале [a, b], и сумму чисел, стоящих на местах, кратных 3 Найти сумму чисел в интервале по условию Искать еще темы с ответами Или воспользуйтесь поиском по форуму: 6 |