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;
}
}
