zoukankan      html  css  js  c++  java
  • P2261 bzoj1257 [CQOI2007]余数求和



    一道数论分块
    首先这类的求和写一下公式
    ∑n%i=∑n-i*(n/i)=
    ∑n-∑i*(n/i)
    前面的好求所以 
    ans=nk+∑k*(k/i);
    于是进行分块
    这里总结一下
    只要出现除法∑就进行分块
    由阿尔贝和推论
    加号后面的也等于
    (∑i)(∑(k/【i】-k+1/【i】))(阿尔贝恒等式)
    这样是不是更显然了
    ∑i等差数列求和
    后面的参见我的数论分块另一个博客

    #include<cstdio> #include<iostream> #include<algorithm> using namespace std; #define ll long long int main() { ll n,k; cin>>n>>k; ll ans=n*k; for(ll l=1,r;l<=n;l=r+1) { if(k/l!=0) r=min(k/(k/l),n); else r=n; ans-=(k/l)*(r-l+1)*(l+r)/2; } cout<<ans; return 0; }
  • 相关阅读:
    poj1581
    poj3094
    poj2196
    poj1003
    poj2262
    poj1083
    poj3299
    poj2739
    poj1552
    js 获取元素高度和宽度
  • 原文地址:https://www.cnblogs.com/iboom/p/9075639.html
Copyright © 2011-2022 走看看