https://www.luogu.org/problemnew/show/P2424

记 \(\sigma(n)\) 为n的所有约数之和,例如 \(\sigma(6)=1+2+3+6=12\) .

求 \(ans(n)=\sum\limits_{i=x}^{y}\sigma(i)\) .

首先,记 \(f(n)=\sum\limits_{i=1}^{n}\sigma(i)\) ,则 \(ans(n)=f(y)-f(x-1)\) .

对于 \(f(n)=\sum\limits_{i=1}^{n}\sigma(i)\) ,一个直接的做法是枚举i然后枚举i的因子求和,显然会TLE.

考虑直接枚举因子,易知 \(n\) 以内 \(d\) 的一共有 \(\lfloor\frac{n}{d}\rfloor\) 个,

则有 $f(n)=\sum\limits_{d=1}^{n} d * \lfloor\frac{n}{d}\rfloor $ ,类似的形式在余数求和中见过,直接复制:

记 $ c= \lfloor\frac{n}{d}\rfloor $ 则每段 \(d\) 对应相同的一个 \(c\)

import java.io.*;
import java.util.*;
import java.math.*; public class Main {
public static void solve(Scanner cin,PrintStream cout){
while(cin.hasNext()){
long x=cin.nextLong(),y=cin.nextLong();
cout.println(sumfenkuai(y)-sumfenkuai(x-1));
}
} public static long sumfenkuai(long n){
long ans=0;
for(long l=1,r; l<=n; l=r+1) {
if(n/l!=0) {
r=Math.min(n/(n/l),n);
} else {
//n/l==0,意味着l>n,所有的后面的下整都是0,分成同一块
r=n;
break;
} //d={l,l+1,...r}
//sum(d)=(l+r)*(r-l+1)/2
//c=n/l=n/r //ans=sum_d=1^n:(sum(d)*c)
ans+=(n/l)*(r-l+1)*(l+r)/2;
}
return ans;
} public static void main(String[] args) {
//setFileIO("D://test");
Scanner cin=new Scanner(System.in);
PrintStream cout=new PrintStream(System.out); solve(cin,cout); cin.close();
cout.close();
} public static void FileIO(String filename){
FileInputStream fis = null;
try {
fis = new FileInputStream(filename+".in");
} catch (FileNotFoundException e) {
// TODO Auto-generated catch block
e.printStackTrace();
} System.setIn(fis); PrintStream ps = null;
try {
ps = new PrintStream(new FileOutputStream(filename+".out"));
} catch (FileNotFoundException e) {
// TODO Auto-generated catch block
e.printStackTrace();
}
System.setOut(ps);
}
}

洛谷 - P2424 - 约数和 - 整除分块的更多相关文章

  1. 洛谷P3935 Calculating(整除分块)

    题目链接:洛谷 题目大意:定义 $f(x)=\prod^n_{i=1}(k_i+1)$,其中 $x$ 分解质因数结果为 $x=\prod^n_{i=1}{p_i}^{k_i}$.求 $\sum^r_{ ...

  2. 洛谷 P2424 约数和

    题目背景 Smart最近沉迷于对约数的研究中. 题目描述 对于一个数X,函数f(X)表示X所有约数的和.例如:f(6)=1+2+3+6=12.对于一个X,Smart可以很快的算出f(X).现在的问题是 ...

  3. 洛谷 - P4450 - 双亲数 - 整除分块

    https://www.luogu.org/fe/problem/P4450 应该不分块也可以. 求\(F(n,m,d)=\sum\limits_{i=1}^{n}\sum\limits_{j=1}^ ...

  4. 洛谷—— P2424 约数和

    https://www.luogu.org/problem/show?pid=2424 题目背景 Smart最近沉迷于对约数的研究中. 题目描述 对于一个数X,函数f(X)表示X所有约数的和.例如:f ...

  5. 洛谷P2424 约数和 题解

    题目 约数和 题解 此题可以说完全就是一道数学题,不难看出这道题所求的是 \(\sum\limits_{i=x}^{y}{\sum\limits_{d|i}{d}}\) 的值. 很显然,用暴力枚举肯定 ...

  6. 莫队 [洛谷2709] 小B的询问[洛谷1903]【模板】分块/带修改莫队(数颜色)

    莫队--------一个优雅的暴力 莫队是一个可以在O(n√n)内求出绝大部分无修改的离线的区间问题的答案(只要问题满足转移是O(1)的)即你已知区间[l,r]的解,能在O(1)的时间内求出[l-1, ...

  7. 洛谷P3396 哈希冲突 (分块)

    洛谷P3396 哈希冲突 题目背景 此题约为NOIP提高组Day2T2难度. 题目描述 众所周知,模数的hash会产生冲突.例如,如果模的数p=7,那么4和11便冲突了. B君对hash冲突很感兴趣. ...

  8. 洛谷 [SDOI2015]约数个数和 解题报告

    [SDOI2015]约数个数和 题目描述 设\(d(x)\)为\(x\)的约数个数,给定\(N,M\),求$ \sum\limits^N_{i=1}\sum\limits^M_{j=1}d(ij)$ ...

  9. 洛谷 - P1403 - 约数研究 - 数论

    https://www.luogu.org/problemnew/show/P1403 可以直接用线性筛约数个数求出来,但实际上n以内i的倍数的个数为n/i的下整,要求的其实是 $$\sum\limi ...

随机推荐

  1. Oracle 索引 简单介绍

    1 索引的创建语法: CREATE UNIUQE | BITMAP INDEX <schema>.<index_name>       ON <schema>.&l ...

  2. ubuntu 安装后的配置

    osx 下用 vmware 安装了一个 ubuntu 虚拟机,版本是 14.04 server.安装完之后要做一系列配置,记录如下. 配置 Android 编译环境 sudo apt-get inst ...

  3. windows常用命令(转载)

    1.最基本,最常用的,测试物理网络的  ping 192.168.0.8 -t ,参数-t是等待用户去中断测试 2.查看DNS.IP.Mac等  A.Win98:winipcfg  B.Win2000 ...

  4. JAVA RMI远程方法调用简单实例(转载)

    来源:http://www.cnblogs.com/leslies2/archive/2011/05/20/2051844.html RMI的概念 RMI(Remote Method Invocati ...

  5. android开发——自己定义相机(Camera)开发总结

    近期这段时间我一直在开发自己定义相机.谷歌了些网上的demo.发现有非常多各种各样的问题.终于还是从API的camera类開始学习,进行改进. 以下对之前的实现进行一些总结. 官方camera API ...

  6. 清除inline-block元素默认间距

    1. font-size:0; 2.letter-spaceing:-0.5em;

  7. Liquibase

    http://www.liquibase.org/documentation/index.html https://github.com/studygolang/studygolang/tree/ma ...

  8. Ubuntu安装搜狗输入法笔记

    1.移除ibus sudo apt-get purge ibussudo apt-get autoremove 2.安装fcitx sudo apt-get install fcitx 3.安装搜狗输 ...

  9. 牛客练习赛14 D 比较月亮大小 【水】

    链接:https://www.nowcoder.com/acm/contest/82/D 来源:牛客网 比较月亮大小 时间限制:C/C++ 1秒,其他语言2秒 空间限制:C/C++ 262144K,其 ...

  10. socket 学习笔记

    #include <sys/socket.h> ---------------------------------------------------------------------- ...