文章目录

  • 题目如下:
  • 思考人生:

题目如下:

lightoj 1098 A New Function
求1-n所有数的所有约数之和(不包括1和它本身).n<=2e9.

思考人生:

首先考虑打表找规律.规律并不是这么好找的.我们暂时放弃.
如果直接暴力去跑,是 O ( n × n ) O(n\times \sqrt{n}) O(n×n ​) 的.
那么我们从另一个方向考虑.

/*
我们不从每一个数有多少约数考虑,而是从每一个数是多少个数的约数这个方向考虑,略加思考,可以得到O(n)的做法.
*/
int main(){ll n,llx=0;//llx=ans
for (int i=2;i<=n;++i){llx+=(n/i-1)*i;//n/i是1-n里有多少个数是它的倍数,-1是因为n/i包括i,而i的因子和是不算i的.}write(llx);
}

那么还有什么办法可以优化呢?
剩下了上面说的整除分块!
所以这到底是一种什么样的优化呢?我们来思考一下.

你会发现,当n变大以后,有很多数字i的n/i-1的值是完全一样的.
我们可以发现这些数算的时候值*i变成了一个等差数列,对于这些数我们可以用一个等差数列求和公式搞定它.
但是当n特别小的时候,n/i的值变化特别大,我们不如直接用上面的O(n)方法枚举.
这当中找一个平衡,显然可以看出取到sqrt(n)是最优的.
这样就有了如下代码.
#pragma GCC optimize("inline,Ofast",3)
#include<bits/stdc++.h> //Ithea Myse Valgulious
namespace chtholly{typedef long long ll;
#define re0 register int
#define rec register char
#define rel register ll
#define gc getchar
#define pc putchar
#define p32 pc(' ')
#define pl puts("")
/*By Citrus*/
inline int read(){int x=0,f=1;char c=gc();for (;!isdigit(c);c=gc()) f^=c=='-';for (;isdigit(c);c=gc()) x=(x<<3)+(x<<1)+(c^'0');return f?x:-x;}
template <typename mitsuha>
inline bool read(mitsuha &x){x=0;int f=1;char c=gc();for (;!isdigit(c)&&~c;c=gc()) f^=c=='-';if (!~c) return 0;for (;isdigit(c);c=gc()) x=(x<<3)+(x<<1)+(c^'0');return x=f?x:-x,1;}
template <typename mitsuha>
inline int write(mitsuha x){if (!x) return 0&pc(48);if (x<0) x=-x,pc('-');int bit[20],i,p=0;for (;x;x/=10) bit[++p]=x%10;for (i=p;i;--i) pc(bit[i]+48);return 0;}
inline char fuhao(){char c=gc();for (;isspace(c);c=gc());return c;}
}using namespace chtholly;
using namespace std;
ll n,llx;int main(){for (int t=read(),zxy=0,i;t--;){read(n),llx=0;int pos;for (i=1;i*i<=n;++i){int now=n/i;pos=n/(i+1);llx+=1ll*(now+pos+1)*(i-1)*(now-pos)>>1;//等差数列求和,now+pos+1是首项+末项,now-pos是项数,i-1是因为不能自己的约数不能加自己.不要忘记除以二.}for (i=2;i<=pos;++i) llx+=1ll*(n/i-1)*i;//暴力从2-n/(sqrt(n)+1)跑.printf("Case %d: ",++zxy);write(!n?0:llx),pl;//最后加一个特判0.}
}
/*
1:0
2:0
3:0
4:2
5:2
6:7
7:7
8:13
9:16
10:23
11:23
12:38
13:38
14:47
15:55
16:69
17:69
18:89
19:89
20:110
21:120
22:133
23:133
24:168
25:173
26:188
27:200
28:227
29:227
30:268
31:268
32:298
33:312
34:331
35:343
36:397
37:397
38:418
39:434
40:483
41:483
42:536
43:536
44:575
45:607
46:632
47:632
48:707
49:714
50:756
51:776
52:821
53:821
54:886
55:902
56:965
57:987
58:1018
59:1018
60:1125
61:1125
62:1158
63:1198
64:1260
65:1278
66:1355
67:1355
68:1412
69:1438
70:1511
71:1511
72:1633
73:1633
74:1672
75:1720
76:1783
77:1801
78:1890
79:1890
80:1995
81:2034
82:2077
83:2077
84:2216
85:2238
86:2283
87:2315
88:2406
89:2406
90:2549
91:2569
92:2644
93:2678
94:2727
95:2751
96:2906
97:2906
98:2978
99:3034
100:3150
*/

分块优化不愧是一个奇技淫巧.谢谢大家.

lightoj 1098 A New Function 约数之和(一道奇怪的数论) 整除分块优化相关推荐

  1. LightOJ - 1098 A New Function

    题意:定义SOD(n)=n除去1和自身的所有因数的和,CSOD(n)为ΣSOD(i),1<=i<=n.T (≤ 1000)组数据,求CSOD(n),(0 ≤ n ≤ 2 * 109) 对于 ...

  2. 《算法竞赛进阶指南》打卡-基本算法-AcWing 97. 约数之和:递归、快速幂

    文章目录 题目解答 题目来源 题目解答 来源:acwing 分析: 快速幂参考笔者的这篇博文: 算法刷题-数论-组合数.快速幂.逆元.递推求组合数.逆元求组合数 约数之和参考笔者的这篇博文: 算法刷题 ...

  3. 算法刷题-数论-试除法求约数、约数个数、约数之和、最大公约数(辗转相除法)

    文章目录 acwing869. 试除法求约数 acwing870. 约数个数 acwing871. 约数之和 acwing872. 最大公约数 acwing869. 试除法求约数 acwing869. ...

  4. 51NOD 1220 约数之和(杜教筛)

    1220 约数之和 推式子 ∑i=1n∑j=1nd(i,j)=∑i=1n∑j=1n∑x∣i∑y∣j(gcd(x,y)=1)xjy=∑d=1ndμ(d)∑i=1nd∑x∣iix∑j=1nd∑y∣jj=∑ ...

  5. ~~约数之和(附模板题)

    模板 如果 N = p1^c1 * p2^c2 * ... *pk^ck 约数个数: (c1 + 1) * (c2 + 1) * ... * (ck + 1) 约数之和: (p1^0 + p1^1 + ...

  6. 第F题 真约束之和(通解)古希腊数学家毕达哥拉斯在自然数研究中发现,220的所有真约数(即不是自身的约数)之和为:  1+2+4+5+10+11+20+22+44+55+110=284

    古希腊数学家毕达哥拉斯在自然数研究中发现,220的所有真约数(即不是自身的约数)之和为: 1+2+4+5+10+11+20+22+44+55+110=284. 而284的所有真约数为1.2.4.71. ...

  7. 约数之和 c语言,(c语法百题20)约数之和,约数之和

    (c语法百题20)约数之和,约数之和 知识点: 求约数的算法 for语句,if语句灵活运用. 内容: 键入一个自然数 ,求这个自然数的所有约数之和 输入说明: 一个整数 输出说明: 一个整数 输入样例 ...

  8. 真约数求法 c语言,数学:求一个数的真约数(因数)的个数及所有约数之和

    一. 我们知道,每个自然数(不包括0和1)都有2个以上的因数,因数最少的是质数(也叫素数),质数的因数是1和它本身.非质数的自然数也叫合数,它们都含有3个以上(含3个)的因数. 1.怎样求一个数有多少 ...

  9. POJ1845(约数之和)

    自闭的人的题解 POJ1845 约数之和 题目描述: 给你两个整数A.B,让你求出a^b中所有的约数的和膜上9901的值. 输入 : 两个正整数A,B 输出 : 一个正整数表示答案 样例: IN :2 ...

最新文章

  1. 编写程序,在文件file1.dat中存入字符串“good morning”,然后将file1.dat中的内容输出到屏幕上,并复制到文件file2.dat中
  2. 车联网支持实现无人驾驶的思考
  3. g++ 安装python_mac编译安装faiss
  4. 西部开源学习笔记BOOK2-《unit 4》
  5. php视图,thinkPHP框架中视图的讲解(附代码)
  6. mysql500万数据查询速度_是什么影响了数据库查询速度
  7. Teams的Incoming Webhook
  8. 硕博士的朋友圈都有哪些特点?
  9. 2021年算法工作总结
  10. Typecho浅色三栏主题
  11. 操作系统(10)-虚拟内存
  12. 计算机视觉 AI 工具集 OpenVINO™,是你心目中的深度学习框架 Top1 吗?
  13. fft_fft_control
  14. sql注入攻击与防御第二章
  15. 试从微型计算机的硬件组成角度谈谈单片机,单片机原理及应用习题答案
  16. h5游戏网站源码_从WEB前端角度看H5游戏开发
  17. 为什么电脑安装qq后显示没网络连接服务器,能上QQ电脑却无法上网怎么解决
  18. 360校招笔试算法题
  19. 寒江独钓第3章——串口过滤
  20. Linux 系统维护命令小结

热门文章

  1. android okhttp 断点续传,OkHttp实现断点续传
  2. Fedora安装后的基本配置
  3. halcon第二讲:焊点提取
  4. 磁盘这列(Raid)
  5. (概率/dp)P2059 [JLOI2013]卡牌游戏
  6. Android 8.0系统源码分析--Camera processCaptureResult结果回传源码分析
  7. not x、not None 和 is None的使用及区别
  8. 流式双染凋亡率的计算_Annexin V-FITC/PI双染法流式细胞术检测细胞凋亡
  9. 对软件工程这门课的疑问
  10. Linux内核MTD子系统七之Flash 存储器接口标准:CFI和JEDEC