• Codeforces 616 E Sum of Remainders


    Discription

    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.

    Example

    Input
    3 4
    Output
    4
    Input
    4 4
    Output
    1
    Input
    1 1

    Output
    0



    数论分块大水题,我是把n%i 转化成 n-i*[n/i]做的233

    #include<bits/stdc++.h>
    #define ll long long
    const int ha=1000000007;
    using namespace std;
    ll N,M,ans;
    
    inline int add(int x,int y){
        x+=y;
        return x>=ha?x-ha:x;
    }
    
    inline int ci(ll x){
        x%=ha;
        return x*(ll)(x+1)/2%ha;
    }
    
    inline void solve(){
        ans=M%ha*(N%ha)%ha,M=min(M,N);
        for(ll i=1,j,now;i<=M;i=j+1){
            now=N/i,j=min(N/now,M);
            ans=add(ans,ha-add(ci(j),ha-ci(i-1))*now%ha);
        }
        printf("%I64d
    ",ans);
    }
    
    int main(){
        scanf("%I64d%I64d",&N,&M);
        solve();
        return 0;
    }
    

      

     
  • 相关阅读:
    POJ2406【KMP-next数组】
    POJ2752【KMP-next数组含义】
    POJ3696【欧拉函数+欧拉定理】
    POJ3692【二分匹配】
    POJ3697【BFS】
    CodeForces599D【数学】
    CodeForces599C【贪心】
    HDU1829【种类并查集】
    HDU3038【种类并查集】
    POJ1182【种类并查集】
  • 原文地址:https://www.cnblogs.com/JYYHH/p/8633987.html
Copyright © 2020-2023  润新知