Dreamoon loves summing up something for no reason. One day he obtains two integers a and b occasionally. He wants to calculate the sum of all nice integers. Positive integer x is called nice if and , where k is some integer number in range[1, a].
By we denote the quotient of integer division of x and y. By we denote the remainder of integer division of x and y. You can read more about these operations here: http://goo.gl/AcsXhT.
The answer may be large, so please print its remainder modulo 1 000 000 007 (109 + 7). Can you compute it faster than Dreamoon?
The single line of the input contains two integers a, b (1 ≤ a, b ≤ 107).
Print a single integer representing the answer modulo 1 000 000 007 (109 + 7).
1 1
0
2 2
8
For the first sample, there are no nice integers because is always zero.
For the second sample, the set of nice integers is {3, 5}.
题目大意:
给出a和b,求出符合以下条件的数字"X"的和:
设m为x/b的商,n为x/b的余。
m/n=k, 1 <= k <= a;
解法:
由题意可得:
x= m*b+n; m=kn; => x=k*n*b+n= n*(k*b+1); 其中 0 <= n < b, 1 <= k <= a;
sum x = [b*(b-1)/2] * (k*b+1) = [b*(b-1)/2] * [a*(a+1)/2+a];
代码:
#include <iostream>
using namespace std;
#define LL long long
#define modn 1000000007
LL ans;
LL a, b;
int main() {
cin >> a >> b;
/* LL tmp1 = (a*(a+1)/2)%modn;
tmp1 = (tmp1*b+a)%modn;
LL tmp2 = (b*(b-1)/2)%modn;
ans = (tmp1*tmp2)%modn;
*/
for (LL i = 1; i <= a; i++) {
LL tmp1=(b*i+1)%modn;
LL tmp2=(b*(b-1)/2)%modn;
ans = (ans+tmp1*tmp2)%modn;
}
cout << ans;
}