P1403 [AHOI2005]约数研究(筛法)
题目描述
科学家们在 Samuel 星球上的探险得到了丰富的能源储备,这使得空间站中大型计算机 Samuel II 的长时间运算成为了可能。由于在去年一年的辛苦工作取得了不错的成绩,小联被允许用 Samuel II 进行数学研究。
小联最近在研究和约数有关的问题,他统计每个正数 NNN 的约数的个数,并以 f(N)f(N)f(N) 来表示。例如 121212 的约数有 1,2,3,4,6,121,2,3,4,6,121,2,3,4,6,12,因此 f(12)=6f(12)=6f(12)=6。下表给出了一些 f(N)f(N)f(N) 的取值:
NNN | 111 | 222 | 333 | 444 | 555 | 666 |
---|---|---|---|---|---|---|
f(N)f(N)f(N) | 111 | 222 | 222 | 333 | 222 | 444 |
现在请你求出:
∑i=1nf(i)\sum_{i=1}^n f(i) i=1∑nf(i)
输入格式
输入一个整数 nnn。
输出格式
输出答案。
输入输出样例
输入 #1
3
输出 #1
5
类似筛质数的过程,这里换成给对应位置++。最后求一个前缀和就行。
#include <bits/stdc++.h> using namespace std; int a[1000006]={0};//?不管用 int main() { int n; cin>>n; int i,j; for(i=1;i<=n;i++) { for(j=1;i*j<=n;j++) { a[i*j]++; } } for(i=1;i<=n;i++)a[i]+=a[i-1]; cout<<a[n]; return 0; }