2022-07-19:f(i) : i的所有因子,每个因子都平方之后,累加起来。 比如f(10) = 1平方 + 2平方 + 5平方 + 10平方 = 1 + 4 + 25 + 100 = 130。
2022-07-19:f(i) : i的所有因子,每个因子都平方之后,累加起来。
 比如f(10) = 1平方 + 2平方 + 5平方 + 10平方 = 1 + 4 + 25 + 100 = 130。
 给定一个数n,求f(1) + f(2) + … + f(n)。
 n <= 10的9次方。
 O(n)的方法都会超时!低于它的!
 O(根号N)的方法,就过了,一个思路。
 O(log N)的方法,
 来自蓝桥杯练习题。
答案2022-07-19:
观察表,二分法。
 时间复杂度O(开平方根N + 开平方根N * logN)。
代码用rust编写。代码如下:
fn main() {
    println!("测试开始");
    for i in 1..1000 {
        if sum1(i) != sum2(i) {
            println!("出错了{}", i);
        }
    }
    println!("测试结束");
}
// 暴力方法
fn sum1(n: i64) -> i64 {
    let mut cnt: Vec<i64> = vec![];
    for _ in 0..n + 1 {
        cnt.push(0);
    }
    for num in 1..=n {
        for j in 1..=num {
            if num % j == 0 {
                cnt[j as usize] += 1;
            }
        }
    }
    let mut ans = 0;
    for i in 1..=n {
        ans += i * i * cnt[i as usize];
    }
    return ans;
}
fn get_sqrt(n: i64) -> i64 {
    let mut l: i64 = 1;
    let mut r = n;
    let mut m: i64;
    let mut mm: i64;
    let mut ans = 1;
    while l <= r {
        m = l + ((r - l) >> 1);
        mm = m * m;
        if mm == n {
            return m;
        } else if mm < n {
            ans = m;
            l = m + 1;
        } else {
            r = m - 1;
        }
    }
    return ans;
}
// 正式方法
// 时间复杂度O(开平方根N + 开平方根N * logN)
fn sum2(n: i64) -> i64 {
    // 100 -> 10
    // 200 -> 14
    let sqrt = get_sqrt(n);
    let mut ans = 0;
    for i in 1..=sqrt {
        ans += i * i * (n / i);
    }
    // 后半段
    // 给你一个个数,二分出几个因子,处在这个个数上!
    // 由最大个数(根号N), 开始二分
    let mut k = n / (sqrt + 1);
    while k >= 1 {
        ans += sum_of_limit_number(n, k);
        k -= 1;
    }
    return ans;
}
// 平方和公式n(n+1)(2n+1)/6
fn sum_of_limit_number(v: i64, n: i64) -> i64 {
    let r = cover(v, n);
    let l = cover(v, n + 1);
    return ((r * (r + 1) * ((r << 1) + 1) - l * (l + 1) * ((l << 1) + 1)) * n) / 6;
}
fn cover(v: i64, n: i64) -> i64 {
    let mut l = 1;
    let mut r = v;
    let mut m;
    let mut ans = 0;
    while l <= r {
        m = (l + r) / 2;
        if m * n <= v {
            ans = m;
            l = m + 1;
        } else {
            r = m - 1;
        }
    }
    return ans;
}
执行结果如下:

2022-07-19:f(i) : i的所有因子,每个因子都平方之后,累加起来。 比如f(10) = 1平方 + 2平方 + 5平方 + 10平方 = 1 + 4 + 25 + 100 = 130。的更多相关文章
- AI Summit(2018.07.19)
		AI Summit 时间:2018.07.19地点:北京丽都皇冠假日酒店 
- 2021.07.19 P2294 狡猾的商人(差分约束)
		2021.07.19 P2294 狡猾的商人(差分约束) [P2294 HNOI2005]狡猾的商人 - 洛谷 | 计算机科学教育新生态 (luogu.com.cn) 重点: 1.差分约束最长路与最短 ... 
- 2021.07.19 P2624 明明的烦恼(prufer序列,为什么杨辉三角我没搞出来?)
		2021.07.19 P2624 明明的烦恼(prufer序列,为什么杨辉三角我没搞出来?) [P2624 HNOI2008]明明的烦恼 - 洛谷 | 计算机科学教育新生态 (luogu.com.cn ... 
- 2021.07.19 BZOJ2654 tree(生成树)
		2021.07.19 BZOJ2654 tree(生成树) tree - 黑暗爆炸 2654 - Virtual Judge (vjudge.net) 重点: 1.生成树的本质 2.二分 题意: 有一 ... 
- JZOJ 2022.07.06【提高组A】模拟
		历程 被暴打了 原因是钻进了 \(T4\) 的坑中... 先看完题,发现 \(T4\) 比较有意思,\(T2\) 没有想法 \(T3\) 挺容易,做法似乎很好想 \(T1\) 送分,十几分钟搞定 然后 ... 
- Murano Weekly Meeting 2016.07.19
		Meeting time: 2016.July.19 1:00~2:00 Chairperson: Kirill Zaitsev, from Mirantis Meeting summary: 1. ... 
- JZOJ 2022.07.18【提高组A】模拟
		\(\text{T1}\) 很容易想到用 \(f_1 f_2 ... f_k\) 来表示第 \(n\) 项 发现重点关注指数即可,即我们要递推 \(f_1 ... f_k\) 对应的指数 递推涉及 \ ... 
- 07.19 Linux命令 cd
		情景:在用compass编写sass,cd进入目录后,想退出, 解决: cd.. 回到上一层目录 cd\ 回到根目录 cd 进入具体目录 
- C# Socket的TCP通讯 异步 (2015-11-07 10:07:19)转载▼
		异步 相对于同步,异步中的连接,接收和发送数据的方法都不一样,都有一个回调函数,就是即使不能连接或者接收不到数据,程序还是会一直执行下去,如果连接上了或者接到数据,程序会回到这个回调函数的地方重新往下 ... 
- maven课程 项目管理利器-maven 5-1 课程总结 1星(2018-11-08 07:19)
		1 maven windows环境搭建和配置环境变量 2 maven骨架和pom.xml 解析 3 命令行窗口常用的maven命令 4 仓库和坐标 5 maven Java项目 6 生命周期,依赖聚合 ... 
随机推荐
- mock数据规则
			Mock数据规则 随机生成100条内的list数据 let Mock = require("mockjs"); let basicData = Mock.mock({ " ... 
- unidbgrid显示图片
			column设置imageoptions属性,visible=true,设置width 
- AttributeError: module 'torchvision' has no attribute 'transforms'
			代码:maskrcnn-benchmark Python 3.6.13 |Anaconda, Inc Traceback (most recent call last): File "too ... 
- PHP 数据库操作
			连接数据库 连接数据库常用的函数 mysqli_connect(主机IP,用户名,密码,数据库名,端口号) // 端口号如果是3306可以省略 mysqli_connect_error():获取连接数 ... 
- Android错误之--Error retrieving parent for item: No resource found that matches the given name 'Theme.A
			改正错误 (虽然内容较少,但是还是选择单独占用一篇) 这个错误,可以说是困扰了我好久,然后就看到可以改变一下使用的Android版本,改成Android 4.0,然后就去试了试,发现真的就好了耶! 就 ... 
- 一篇文章带你了解Java中的运算符
			前言 在前一篇文章中,壹哥给大家讲解了Java数据类型之间的转换,包括自动类型转换.强制类型转换.隐含的强制类型转换等问题.且在上一篇文章中,我还简单地给大家提到了Java的类型提升.在类型提升的案例 ... 
- 简述SpringAOP的实现原理
			 Spring默认采取的动态代理机制实现AOP,当动态代理不可用时 (代理类无接口)会使用CGlib机制. Spring提供了两种方式来生成代理对象:JDKProxy和Cglib,具体使用哪种方式生 ... 
- CPU 100%问题排查总结
			更多内容,移步IT-BLOG 排查思路 [1]定位高负载进程 pid:登录进服务器使用 top 或 top -c命令[ps -ef | grep xxx 命令]查看当前 CPU消耗过高的进程,从而得到 ... 
- SpringBoot集成海康网络设备SDK
			目录 SDK介绍 概述 功能 下载 对接指南 集成 初始化项目 初始化SDK 初始化SDK概述 新建AppRunner 新建SdkInitService 新建InitSdkTask 新建 HCNetS ... 
- SpringBoot打包成exe(别再用exe4j了,使用JDK自带工具)
			SpringBoot打包成exe(别再用exe4j了,使用JDK自带工具) 搜到大部分打包exe的文章都是使用exe4j打包 步骤贼多,安装麻烦,打包麻烦 收费软件,公司使用会吃律师函 JDK14以上 ... 
