【AHOI2005】约数研究】的更多相关文章

P1403 [AHOI2005]约数研究 题目描述 科学家们在Samuel星球上的探险得到了丰富的能源储备,这使得空间站中大型计算机“Samuel II”的长时间运算成为了可能.由于在去年一年的辛苦工作取得了不错的成绩,小联被允许用“Samuel II”进行数学研究. 小联最近在研究和约数有关的问题,他统计每个正数N的约数的个数,并以f(N)来表示.例如12的约数有1.2.3.4.6.12.因此f(12)=6.下表给出了一些f(N)的取值: f(n)表示n的约数个数,现在给出n,要求求出f(1)…
第一部分 P1403 [AHOI2005]约数研究 题目描述 科学家们在Samuel星球上的探险得到了丰富的能源储备,这使得空间站中大型计算机“Samuel II”的长时间运算成为了可能.由于在去年一年的辛苦工作取得了不错的成绩,小联被允许用“Samuel II”进行数学研究. 小联最近在研究和约数有关的问题,他统计每个正数N的约数的个数,并以f(N)来表示.例如12的约数有1.2.3.4.6.12.因此f(12)=6.下表给出了一些f(N)的取值: f(n)表示n的约数个数,现在给出n,要求求…
题目传送门 约数研究 题目描述 科学家们在Samuel星球上的探险得到了丰富的能源储备,这使得空间站中大型计算机“Samuel II”的长时间运算成为了可能.由于在去年一年的辛苦工作取得了不错的成绩,小联被允许用“Samuel II”进行数学研究. 小联最近在研究和约数有关的问题,他统计每个正数N的约数的个数,并以f(N)来表示.例如12的约数有1.2.3.4.6.12.因此f(12)=6.下表给出了一些f(N)的取值: f(n)表示n的约数个数,现在给出n,要求求出f(1)到f(n)的总和.…
题目描述 科学家们在Samuel星球上的探险得到了丰富的能源储备,这使得空间站中大型计算机“Samuel II”的长时间运算成为了可能.由于在去年一年的辛苦工作取得了不错的成绩,小联被允许用“Samuel II”进行数学研究. 小联最近在研究和约数有关的问题,他统计每个正数N的约数的个数,并以f(N)来表示.例如12的约数有1.2.3.4.6.12.因此f(12)=6.下表给出了一些f(N)的取值: f(n)表示n的约数个数,现在给出n,要求求出f(1)到f(n)的总和. 输入输出格式 输入格式…
原题链接 https://www.luogu.org/problemnew/show/P1403 这个好难啊,求约数和一般的套路就是求1--n所有的约数再一一求和,求约数又要用for循环来判断......恩--......貌似很简单,看一下n的范围:100%N<=1000000......额,看来要炸 那么怎么办呢?这时候我们就要用玄学啦当然要耐心枚举几个数找找规律啦! 从洛谷题解里看到一位大佬的约数表,再看他详细的解释,终于明白了这个题的玄学所在,放约数图!!! 我们通过这个表可以发现: 在1…
转载luogu某位神犇的题解QAQ 这题重点在于一个公式: f(i)=n/i 至于公式是怎么推出来的,看我解释: 1-n的因子个数,可以看成共含有2因子的数的个数+含有3因子的数的个数……+含有n因子的数的个数 但在1~n中含有“2”这个因子的数有n/2个,3有n/3个,以此类推,公式就出来了 代码: #include<iostream> using namespace std; int n,ans; int main() { cin>>n; ;i<=n;i++)ans+=n…
Description Input 只有一行一个整数 N(0 < N < 1000000). Output 只有一行输出,为整数M,即f(1)到f(N)的累加和. Sample Input 3 Sample Output 5 题解 直接求$\sum_{i=1}^n\sum_{j|i}1=\sum_{j=1}^n\left\lfloor\frac nj\right\rfloor$即可. #include <cstdio> int main() { int n, ans = 0; sc…
Description Input 只有一行一个整数 N(0 < N < 1000000). Output 只有一行输出,为整数M,即f(1)到f(N)的累加和. Sample Input 3 Sample Output 5 http://blog.csdn.net/aarongzk/article/details/50647495 #include<iostream> #include<cstdio> using namespace std; int n,ans; i…
传送门 用类似筛法的原理,就好啦 ——代码 #include <cstdio> int n, ans; int a[1000001]; int main() { int i, j; scanf("%d", &n); for(i = 1; i <= n; i++) for(j = i; j <= n; j += i) a[j]++; for(i = 1; i <= n; i++) ans += a[i]; printf("%d\n"…
怎么会有这么水的省选题 一定是个签到题. 好歹它也是个省选题,独立做出要纪念一下 很容易发现在1~n中,i的因子数是n / i 那就枚举每一个i然后加起来就OK了 #include<cstdio> #define _for(i, a, b) for(int i = (a); i <= (b); i++) using namespace std; int main() { int n; scanf("%d", &n); long long ans = 0; _f…