Challenge: The Simplest Sum
Subdomeniu: Algebra (algebra)
Scor cont: 50.0 / 50
Submission status: Accepted
Submission score: 1.0
Submission ID: 464738680
Limbaj: cpp14
Link challenge: https://www.hackerrank.com/challenges/the-simplest-sum/problem
Cerinta
You are just learning to code and are finished with loops and functions. Now, you are given the following pseudocode:
```cpp
/*
* The function has two integer parameters: k and n
* The function returns the value of sum
*/
function f(k, n) {
sum = 0;
for (i = 1; i ≤ n; i += 1) {
sum += i;
i *= k;
}
return sum;
}
```
For three given integers $k$, $a$, and $b$, find the value of $S \bmod \left(10^{9} + 7\right)$, where $S$ is defined as:
$$S = \sum_{n\ =\ a}^{b} f(k,\ n)$$
Input Format
The first line of the input is an integer $Q$, the total number of queries. Each of the next $Q$ lines contains three space separated integers $k$, $a$, and $b$.
Output Format
For each query, print the value of $S \bmod \left(10^{9} + 7\right)$ on a new line.
Constraints
- $1 \le Q \le 10^{5}$
- $2 \le k \le 10^{5}$
- $1 \le a \le b \le 10^{18}$
Cod sursa
#include <iostream>
#include <vector>
using namespace std;
void solve()
{
long long k, left, right;
cin >> k >> left >> right;
vector <long long> terms;
terms.push_back(1);
while(terms.back() <= (right - 1)/k)
{
long long next = terms.back()*k + 1;
terms.push_back(next);
//cout << "Last term " << terms.back() << "\n";
}
const int MOD = 1e9 + 7;
long long answer = 0;
for(long long term : terms)
{
long long contribution = right - max(left - 1, term - 1);
contribution %= MOD;
answer += (term*contribution)%MOD;
answer %= MOD;
}
cout << answer << "\n";
}
int main()
{
int no_of_queries;
cin >> no_of_queries;
while(no_of_queries--)
solve();
return 0;
}
HackerRank Algebra – The Simplest Sum
