標籤:algorithm 演算法 acm codeforces
題目:C. Dreamoon and Sumstime limit per test1.5 secondsmemory limit per test256 megabytesinputstandard inputoutputstandard output
Dreamoon loves summing up something for no reason. One day he obtains two integers a and boccasionally. 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 theremainder 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?
Input
The single line of the input contains two integers a, b (1?≤?a,?b?≤?107).
Output
Print a single integer representing the answer modulo 1?000?000?007 (109?+?7).
Sample test(s)input
1 1
output
0
input
2 2
output
8
Note
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}.
題意分析:數學題。看懂公式就行了。考慮枚舉一下餘數, 如果m = x%b 則 x = mk*b+m = m(kb+1) m可以預先處理為所有可能的餘數和,注意long long 和取MOD。
代碼:
#include <cstdio>#include <algorithm>#include <cmath>#include <cstring>#include <iostream>using namespace std;const int MOD=1000000007;int main(){ long long a,b; while(cin>>a>>b) { long long m=(1+b-1)*(b-1)/2%MOD; //cout<<m<<endl; long long sum=0; { for(long long i=1;i<=a;i++) { sum=(sum%MOD+m*((b*i)%MOD+1)%MOD)%MOD; } } cout<<sum<<endl; }}
Codeforces Round #272 (Div. 2) C