P1403 [AHOI2005]约数研究

传送门 难度
https://www.luogu.com.cn/problem/P1403 普及-

分析

  • 完成这道题需要知道一个公式,否则为超时。
    公式: [ 1 , n ] [1,n] [1,n]中约数有 p p p的数的个数为: [ n p ] , [\frac{n}{p}], [pn],其中[ ]表示下取整。
  • 本题还存在着优化,即当 p p p很大时,在一个区间范围内 [ n p i ] [\frac{n}{p_i}] [pin]保持不变,因此遍历时可以从 p i p_i pi直接跳到 p j p_j pj,其中 p j = [ n [ n p i ] ] + 1 , p_j=[\frac{n}{[\frac{n}{p_i}]}]+1, pj=[[pin]n]+1,区间长度为 j − i j-i ji

AC代码

#include
#include

using namespace std;

int main() {
	int n;
	cin >> n;
	int res = 0;
	int i, j;
	for (i = 1; i <= n; i = j) {
		j = n / (n / i) + 1;
		res += (n / i ) * (j - i);
		
	}
	cout << res << endl;
	return 0;
}

你可能感兴趣的:(数学知识)