Codeforces 616E - Sum of Remainders

本文详细介绍了616ESumofRemainders问题的求解思路,包括对模运算的理解、优化技巧以及具体实现代码。通过分析样例输入输出,解释了如何计算给定范围内每个数与所有数模运算后的和,并进行模10^9+7后的取余操作。代码中采用了等差数列求和的方法进行优化,确保在大规模数据集上也能高效运行。

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

616E Sum of Remainders

Calculate the value of the sum: n mod 1 + n mod 2 + n mod 3 + … + n mod m. As the result can be very large, you should print the value modulo 109 + 7 (the remainder when divided by 109 + 7).

The modulo operator a mod b stands for the remainder after dividing a by b. For example 10 mod 3 = 1.
Input

The only line contains two integers n, m (1 ≤ n, m ≤ 1013) — the parameters of the sum.
Output

Print integer s — the value of the required sum modulo 109 + 7.
Sample test(s)
Input

3 4

Output

4

Input

4 4

Output

1

Input

1 1

Output

0

  • 思路:
    1.对mod的理解与转化: n%mod = n - n/mod*mod;
    现在答案就变成了 n*m - Σ(1->m)(n/i*i),乍一看认为没什么优化,还是要求后面的从1 到m的Σ(n/i*i);这就是优化。现在就需要用到对整除的理解的~~ 对于n/x = n/i;这样的x的区间边界时什么? 经分析知:[i,n/(n/i)];却这里得到一个很有趣的结论,对于n/(n/(n/i)) = n/i;

    2.然后就是mod运算了,注意在同一个n/i下的区间内数的和(l+r)/2时,为了不爆范围,先用偶数除以二,之后在相乘;
    3.举个例子对下面程序的运行:
    比如n = 15,m = 13;
    则[1,1] ==>是第一个计算的,对于任意的x ,l <= x <= r,n/x = n/i;
    [2,2],[3,3],[4,5],[6,7],[8,13];//区间距离越来越大;这里是优化的对象;
    之后 l = r,再++l;就是对于每一个n/i相等的区间,直接利用等差数列求完,下次求解的时候,l = r+1;即区间不会覆盖;所以对于1e13范围内的数据,还是可以在436ms内求解完毕;如上面最后一次是8~13

#include<bits/stdc++.h>
using namespace std;
typedef long long ll;
const int mod = 1e9+7;
int add(ll a, ll b) { return (a+b)%mod; }
int sub(ll a, ll b) { return ((a-b)%mod + mod)%mod; }
int mult(ll a, ll b) { return ((a%mod) * (b%mod))%mod; }

int main()
{
    ll i,n,m;
    cin>>n>>m;
    int ans = mult(n,m),sum = 0;
    m = min(n,m);
    for(i = 1;i <= m;i++){// l = i,r = n/(n/i);while:l <= x <= r ;n/x = n/i;
        ll r = n/(n/i);
        r = min(r,m);
        ll sm = i + r,nm = r - i + 1;
        if(sm&1) sm = mult(sm,nm/2);
        else sm = mult(sm/2,nm);
        sum = add(sum,mult(sm,n/i));
        i = r;
    }
    ans = sub(ans,sum);
    cout<<ans;
}
内容概要:该研究通过在黑龙江省某示范村进行24小时实地测试,比较了燃煤炉具与自动/手动进料生物质炉具的污染物排放特征。结果显示,生物质炉具相比燃煤炉具显著降低了PM2.5、CO和SO2的排放(自动进料分别降低41.2%、54.3%、40.0%;手动进料降低35.3%、22.1%、20.0%),但NOx排放未降低甚至有所增加。研究还发现,经济性和便利性是影响生物质炉具推广的重要因素。该研究不仅提供了实际排放数据支持,还通过Python代码详细复现了排放特征比较、减排效果计算和结果可视化,进一步探讨了燃料性质、动态排放特征、碳平衡计算以及政策建议。 适合人群:从事环境科学研究的学者、政府环保部门工作人员、能源政策制定者、关注农村能源转型的社会人士。 使用场景及目标:①评估生物质炉具在农村地区的推广潜力;②为政策制定者提供科学依据,优化补贴政策;③帮助研究人员深入了解生物质炉具的排放特征和技术改进方向;④为企业研发更高效的生物质炉具提供参考。 其他说明:该研究通过大量数据分析和模拟,揭示了生物质炉具在实际应用中的优点和挑战,特别是NOx排放增加的问题。研究还提出了多项具体的技术改进方向和政策建议,如优化进料方式、提高热效率、建设本地颗粒厂等,为生物质炉具的广泛推广提供了可行路径。此外,研究还开发了一个智能政策建议生成系统,可以根据不同地区的特征定制化生成政策建议,为农村能源转型提供了有力支持。
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值