P1403 约数研究

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

现在请你求出:i=1nf(i)


Solution

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

f(x)=dx1=d=1x[dx]

所以

i=1nf(i)=i=1ndi1=i=1nd=1i[di]

那么当 d>i 时,对答案并无影响,所以也可以写成 i=1nd=1n[di],在 1n 的数中,会被 1n 中的数整除的个数。

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

d=1ni=1n[di]

而对于一个数 d,可以把 1n 中的数整除的个数为 nd。即求出

d=1nnd

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

#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;
}
posted @   Ciaxin  阅读(24)  评论(0编辑  收藏  举报
相关博文:
阅读排行:
· 地球OL攻略 —— 某应届生求职总结
· 周边上新:园子的第一款马克杯温暖上架
· Open-Sora 2.0 重磅开源!
· 提示词工程——AI应用必不可少的技术
· .NET周刊【3月第1期 2025-03-02】
点击右上角即可分享
微信分享提示