【题解】最大奇约数

该博客讨论了如何高效地求解正整数N的最大奇约数之和。通过分析,指出奇数的最大约数是自身,偶数的最大奇约数是其除所有偶因子后的奇数。提出了O(logn)的解决方案,证明了偶数部分的和可以通过f(2k) = f(k)简化,并利用高斯求和公式得出1+3+5+…+(n-1)等于(n/2)^2。博客中还提供了代数和几何两种证明方法。

摘要生成于 C知道 ,由 DeepSeek-R1 满血版支持, 前往体验 >

题目

题目描述

定义函数f(x)表示x的最大奇约数,这里x表示正整数。例如,f(20) = 5,因为20的约数从小到大分别有:1, 2, 4, 5, 10, 20,其中最大的奇约数为5。

给出正整数N,求f(1)+f(2)+…+f(N)

输入格式

第1行:1个正整数N 1<=N<=10^9

样例

样例输入

7

样例输出

21

数据范围与提示

样例说明

f(1)+f(2)+f(3)+f(4)+f(5)+f(6)+f(7)=1+1+3+1+5+3+7=21


以上是题目


题解

奇数的最大约数是自身, 偶数的最大奇约数是除所有偶因子之后的那个奇数。所以直观的思路就是挨个遍历一遍加起来
但是,这种思路保守估计复杂度为O(n),因为我也搞不清楚这种思路的复杂度到底怎么算,而n的范围是10^9,想都不用想
会TLE

于是有人想到了用记忆化,但你想想你写一个:

int Memory[1000000005];

你心里就不慌吗

评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值