首页 > 其他分享 >P1403 约数研究

P1403 约数研究

时间:2023-01-12 17:56:05浏览次数:59  
标签:约数 right 研究 P1403 sum 个数 mid left

P3935 Calculating 相似的 P1403 约数研究

题目描述

科学家们在 Samuel 星球上的探险得到了丰富的能源储备,这使得空间站中大型计算机 Samuel II 的长时间运算成为了可能。由于在去年一年的辛苦工作取得了不错的成绩,小联被允许用 Samuel II 进行数学研究。

小联最近在研究和约数有关的问题,他统计每个正数 \(N\) 的约数的个数,并以 \(f(N)\) 来表示。例如 \(12\) 的约数有 \(1,2,3,4,6,12\),因此 \(f(12)=6\)。下表给出了一些 \(f(N)\) 的取值:

\(N\) \(1\) \(2\) \(3\) \(4\) \(5\) \(6\)
\(f(N)\) \(1\) \(2\) \(2\) \(3\) \(2\) \(4\)

现在请你求出:\(\large{\sum_{i=1}^n f(i)}\)


Solution

设 \(f(x)\) 为 \(x\) 的所有因数的个数,由唯一分解定理可知,\(x\) 的因数的个数为

\[f(x) =\sum_{d\mid x}1=\sum_{d=1}^{x}{\left[d\mid x\right]} \]

所以

\[\sum_{i=1}^{n}f(i)=\sum_{i=1}^{n}\sum_{d\mid i}1=\sum_{i=1}^{n}\sum_{d=1}^{i}{\left[d\mid i\right]} \]

那么当 \(d>i\) 时,对答案并无影响,所以也可以写成 \(\sum_{i=1}^{n}\sum_{d=1}^{n}{\left[d\mid i\right]}\),在 \(1\) 到 \(n\) 的数中,会被 \(1\) 到 \(n\) 中的数整除的个数。

可以理解为 \(1\) 到 \(n\) 中的数,可以把 \(1\) 到 \(n\) 中的数整除的个数。即,

\[\sum_{d=1}^{n}\sum_{i=1}^{n}{\left[d\mid i\right]} \]

而对于一个数 \(d\),可以把 \(1\) 到 \(n\) 中的数整除的个数为 \(\left\lfloor\frac{n}{d}\right\rfloor\)。即求出

\[\sum_{d=1}^{n}\left\lfloor\frac{n}{d}\right\rfloor \]

很明显,可以用 数论分块 来解决。

#include <bits/stdc++.h>
using namespace std;

int n, ans;

int main()
{
	scanf("%d",&n);
	for (int l = 1, r; l <= n; l = r + 1)
	{
		r = n/(n/l);
		ans += (r-l+1) * (n/l);
	}
	cout << ans ;
	return 0;
}

标签:约数,right,研究,P1403,sum,个数,mid,left
From: https://www.cnblogs.com/Cnghit/p/17047211.html

相关文章