Soluție HackerRank pentru Easy sum, subdomeniul Algebra, în C++14. Include cerința formatată, exemple, explicația pașilor și cod sursă.

  • Problemă: Easy sum
  • Domeniu: Algebra
  • Limbaj: C++14

Challenge: Easy sum

Subdomeniu: Algebra (algebra)

Scor cont: 20.0 / 20

Submission status: Accepted

Submission score: 1.0

Submission ID: 464720770

Limbaj: cpp14

Link challenge: https://www.hackerrank.com/challenges/easy-sum/problem

Cerință

Little Kevin had never heard the word 'Infinitum'. So he asked his mentor to explain the word to him. His mentor knew that 'Infinitum' is a very large number. To show him how big [Infinitum](http://en.wikipedia.org/wiki/Ad_infinitum) can be, his mentor gave him a challenge: to sum the numbers from _1_ up to N. The sum started to get really large and was out of `long long int` range. And so the lesson was clear.

Now his mentor introduced him to the concept of *mod* and asked him to retain only the remainder instead of the big number. And then, he gave him a formula to compute:

∑_i=1^N (i%m)

Input Format
The first line contains T, the number of test cases.
T lines follow, each containing 2 space separated integers _N m_

Output Format
Print the result on new line corresponding to each test case.

Constraint
1 ≤ T ≤ 1000
1 ≤ N ≤ 10<sup>9</sup>
1 ≤ m ≤ 10<sup>9</sup>

Sample Input

3
10 5
10 3
5 5

Sample Output

20
10
10

Explanation
Case 1: N = 10 m = 5,
1%5 + 2%5 + 3%5 + 4%5 + 5%5 + 6%5 + 7%5 + 8%5 + 9%5 + 10%5 = 20.
Similar explanation follows for Case 2 and 3.

Cod sursă

#include<iostream>
#include<math.h>
using namespace std;
int main()
{
    int t;
    cin>>t;
    while(t--)
    {
        long int n,m,a;
        cin>>n>>m;
        a=((((m*(m-1))/2)*(n/m))+(((n%m)*((n%m)+1))/2));
        cout<<a<<endl;
    }
}
HackerRank Algebra – Easy sum