G - Dreamoon and Sums 数学

本文介绍了一种快速计算特定条件下整数之和的方法。利用数学技巧将复杂问题简化,并通过编程实现高效求解。

摘要生成于 C知道 ,由 DeepSeek-R1 满血版支持, 前往体验 >

G - Dreamoon and Sums
Time Limit:1500MS     Memory Limit:262144KB     64bit IO Format:%I64d & %I64u

Description

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?

Input

The single line of the input contains two integers ab (1 ≤ a, b ≤ 107).

Output

Print a single integer representing the answer modulo 1 000 000 007 (109 + 7).

Sample Input

Input
1 1
Output
0
Input
2 2
Output
8

Hint

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


给你此公式 ,k的范围是[1,a],然后给你a和b,让你求满足此条件的x的和。
此公式可以化简为: x=k*mod(x,b)*b+mod(x,b) 即x=(k*b+1)*mod(x,b),k可以枚举,b已知,而mod(x,b)的取值是1~b,可以通过公式直接求出。

#include<cstring>
#include<iostream>
#include<cstdio>
using namespace std;
#define mod 1000000007
int main()
{
  long long a,b;
  while(cin>>a>>b)
{


long long ans=0;
for(long long i=1;i<=a;i++)//k
{


long long c=(i*b+1)%mod;//(k*b+1);
long long d=((b-1)*b/2)%mod;//mod(x,b);
ans=(ans+c*d)%mod;
}
printf("%lld\n",ans);
}
}

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值