zoukankan      html  css  js  c++  java
  • bzoj1257[CQOI2007]余数之和(除法分块)

    1257: [CQOI2007]余数之和

    Time Limit: 5 Sec  Memory Limit: 128 MB
    Submit: 6117  Solved: 2949
    [Submit][Status][Discuss]

    Description

    给出正整数n和k,计算j(n, k)=k mod 1 + k mod 2 + k mod 3 + … + k mod n的值
    其中k mod i表示k除以i的余数。
    例如j(5, 3)=3 mod 1 + 3 mod 2 + 3 mod 3 + 3 mod 4 + 3 mod 5=0+1+0+3+3=7

    Input

    输入仅一行,包含两个整数n, k。
    1<=n ,k<=10^9

     

    Output

    输出仅一行,即j(n, k)。

    Sample Input

    5 3

    Sample Output

    7

    HINT

     

    Source

    /*
    除法分块
    Σk%i=Σ(k-i*[k/i])=nk-Σ(i*[k/i])
    令[k/i]=t;对于每一段相同的t,计算左右端点更细答案。
    设当前块大小为len 
    Σ(i*t)=t*Σi= t*(len+(len-1)*len/2) 
    */
    #include<bits/stdc++.h>
    
    #define ll long long
    
    using namespace std;
    ll n,k,ans;
    
    ll min(ll x,ll y){return x<y?x:y;}
    
    int main()
    {
        scanf("%lld%lld",&n,&k);
        ans=n*k;
        for (long long l=1,r,t;l<=n;l=r+1) 
        {
            t=k/l; 
            if (t==0) r=n;
            else r=min(k/t,n);
               ll len=(r-l+1);
               ans-=t*(len*l+(len-1)*len/2); 
        }
        cout<<ans<<endl;
    }
  • 相关阅读:
    BBS项目
    form组件
    auth模块
    模板语言
    内置auth 的使用,用超级用户创建
    django文件上传
    django序列化问题
    SPI Flash的操作
    输入捕获实验
    uc os相关的C语言知识点1-函数指针
  • 原文地址:https://www.cnblogs.com/L-Memory/p/9911807.html
Copyright © 2011-2022 走看看