zoukankan      html  css  js  c++  java
  • 【BZOJ】1257: [CQOI2007]余数之和(除法分块)

    题目

    传送门:QWQ

    分析

    大佬和我说本题是除法分块,莫比乌斯反演中也有用到。

    QwQ我不会莫比乌斯反演啊~

    题目让我们求  $ sum_{i=1}^n  kmod n $

    然后根据$ a mod b = a - left lfloor  frac{a}{b} ight  floor  imes b$

    原式就变成了$ n*k - sum_{i=1}^n frac{k}{i} imes i$

    发现$ frac{k}{i} $在一定范围内是不变的,然后计算一下就能$ O(sqrt{n}) $内解决了

    代码

     1 #include <bits/stdc++.h>
     2 using namespace std;
     3 typedef long long ll;
     4 int main()
     5 {
     6     ll n,k,ans;
     7     scanf("%lld%lld",&n,&k); ans=n*k;
     8     for(ll l=1,r;l<=n;l=r+1){
     9         ll t=k/l;
    10         
    11         if(t) r=min(k/t,n);
    12         else r=n;
    13         ans-=(l+r)*(r-l+1)/2*t;
    14     //    printf("--- %lld %lld %lld
    ",l,r,(r-l+1)*(r-l)/2*t);
    15     }
    16     printf("%lld
    ",ans);
    17     return 0;
    18 }
  • 相关阅读:
    跨域处理
    intellij idea远程调试
    sring boot特性
    spring mvc与struts2的区别
    jenkins集成sonar
    hibernate笔记
    python脚本
    python 字符框
    python操作
    python环境配置
  • 原文地址:https://www.cnblogs.com/noblex/p/9447521.html
Copyright © 2011-2022 走看看