没错,数学也有分类了qaq,我之前学算法的时候妹学数学,今天算是被搞怕了(但还是不听ovo)
学会了两种方法,主要思想还是,对于每个i来说,他在从1-n中的贡献值是n/i,也就是1-n中约数含有它的数目是n/i(厉害吧,刚学的)
另外一种方法是筛法,说实话这个你应该想到的(恼),不优化会爆的(30分)
题目描述
科学家们在 Samuel 星球上的探险得到了丰富的能源储备,这使得空间站中大型计算机 Samuel II 的长时间运算成为了可能。由于在去年一年的辛苦工作取得了不错的成绩,小联被允许用 Samuel II 进行数学研究。
小联最近在研究和约数有关的问题,他统计每个正数 N 的约数的个数,并以 f(N) 来表示。例如 1212 的约数有 1,2,3,4,6,12,因此 (12)=6f(12)=6。下表给出了一些 (f(N) 的取值:
N | 11 | 22 | 33 | 44 | 55 | 66 |
---|---|---|---|---|---|---|
f(N) | 11 | 22 | 22 | 33 | 22 | 44 |
现在请你求出:
f[i]的前n项和
输入格式
输入一个整数 n。
输出格式
输出答案。
输入输出样例
输入 #1
3
输出 #1
5
说明/提示
- 对于 20%20% 的数据,
//方法一: #include<bits/stdc++.h> using namespace std; int main() { long long res=0; int n; cin>>n; for(int i=1;i<=n;i++) res+=n/i; cout<<res; } //筛法 #include<bits/stdc++.h> using namespace std; const int N=1000010; int f[N],n,res; int main() { cin>>n; for(int i=1;i<=n;i++) { for(int j=i;j<=n;j+=i) f[j]++; res+=f[i]; } cout<<res; return 0; }
- 对于 100%100% 的数据,1≤≤1061≤N≤106。