小G的sum
题目链接:nowcoder 218396
到牛客看:
题目大意
求 1~n 中每个数最小的约数和最大的约数的和。
思路
大家都知道,一个数最小的约数是 1 1 1,最大的约数是它自己。
那就是等于
∑
i
=
1
n
(
1
+
i
)
\sum\limits_{i=1}^{n}(1+i)
i=1∑n(1+i),然后化简一下:
n
+
(
1
+
n
)
×
n
/
2
=
2
×
n
/
2
+
(
1
+
n
)
×
n
/
2
=
(
3
+
n
)
×
n
/
2
n+(1+n)\times n/2=2\times n/2+(1+n)\times n/2=(3+n)\times n/2
n+(1+n)×n/2=2×n/2+(1+n)×n/2=(3+n)×n/2。
然后就可以 O ( 1 ) O(1) O(1) 求了。
代码
#include<cstdio>
using namespace std;
int n;
int main() {
scanf("%d", &n);
printf("%lld", 1ll * n * (n + 3) >> 1ll);
return 0;
}