Как найти сумму целых чисел на промежутке

Столкнулся с этой задачей еще давно и так и не дает покоя. Понятно, что циклом решить это затратно по времени, но я нашел и другой выход – арифметическая прогрессия, но тут начало не с 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

Комментировать ответ…Комментировать…

Вы знаете ответ на этот вопрос?

Поделитесь своим опытом и знаниями

Войти и ответить на вопрос

1 ответ

скрыт(Почему?)

Improve Article

Save Article

Like Article

  • Read
  • Discuss
  • 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

    C++
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
    13
    14
    15
    16
    17
    18
    19
    20
    21
    
    int main()
     
    {
    int a, b  // два целых числа, начало и конец интервала
    int s; // сумма 
     
    s=0;
     
    cout << "Vvedite nachalo intervala";
    cin >> a;
     
    cout << "Vvedite konec intervala";
    cin >> b;
     
    for ( int i = a; i < b; i++ ) 
    s = s + i; 
    cout << "Summa= "<< s;
     
    return 0;
     
    }



    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

    Цитата
    Сообщение от Kolbusdkiy
    Посмотреть сообщение

    Как можно ускорить такую программу?

    C++
    1
    2
    
    for ( int i = a; i < b; s += i++ )
                 ;// пустой оператор



    0



    IT_Exp

    Эксперт

    87844 / 49110 / 22898

    Регистрация: 17.06.2006

    Сообщений: 92,604

    11.05.2014, 21:19

    Помогаю со студенческими работами здесь

    Найти сумму таких чисел в интервале [a;b], синус которых больше нуля
    Здравствуйте нужно доделать задание, но не представляю как. Вводятся числа a и b. Найти сумму таких…

    Найти сумму всех целых чисел на заданном интервале, дающих при делении на 5 в остатке 3 (цикл for)
    Найти сумму всех целых чисел, дающих при делении на 5 в остатке 3, из отрезка

    Найти количество чисел в интервале [a, b], и сумму чисел, стоящих на местах, кратных 3
    Найти количество чисел, принадлежащих промежутку , и
    сумму чисел, стоящих на местах, кратных 3

    Найти сумму чисел в интервале по условию
    Условие : подсчитайте сумму тех целых положительных чисел из интервала от n до m, которые кратны…

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

    Или воспользуйтесь поиском по форуму:

    6

    Добавить комментарий