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

题目大意:给出n,求1~n所有数的约数个数的和. 将“1~n所有数的约数”的模板中的factor[i*j].push_back(i)改为FactorCnt[i*j]++,最后再求一次和即可. #include <cstdio> #include <cstring> using namespace std; const int MAX_N = 1000010; int Proceed(int n) { static int FactorCnt[MAX_N]; memset(Facto…
1968: [Ahoi2005]COMMON 约数研究 Time Limit: 1 Sec  Memory Limit: 64 MBSubmit: 2032  Solved: 1537[Submit][Status][Discuss] Description Input 只有一行一个整数 N(0 < N < 1000000). Output 只有一行输出,为整数M,即f(1)到f(N)的累加和. Sample Input 3 Sample Output 5 HINT   Source Day2…
洛谷1403 约数研究 题目描述 科学家们在Samuel星球上的探险得到了丰富的能源储备,这使得空间站中大型计算机"Samuel2"的长时间运算成为了可能.由于在去年一年的辛苦工作取得了不错的成绩,小联允许用"Samuel2"进行数学研究. 小联最近在研究和约数有关的问题,他统计每个正数N的约数的个数,并以f(N)来表示.现在小联希望用"Samuel2"来统计f(1)到f(N)的累加和M. f(n)表示n的约数个数,现在给出n,要求求出f(1)到…
1968: [Ahoi2005]COMMON 约数研究 Time Limit: 1 Sec Memory Limit: 64 MB Submit: 1513 Solved: 1154 [Submit][Status][Discuss] Description Input 只有一行一个整数 N(0 < N < 1000000). Output 只有一行输出,为整数M,即f(1)到f(N)的累加和. Sample Input 3 Sample Output 5 HINT Source Day2 奇…
1968: [Ahoi2005]COMMON 约数研究 Time Limit: 20 Sec Memory Limit: 256 MB 题目连接 http://www.lydsy.com/JudgeOnline/problem.php?id=1968 Description Input 只有一行一个整数 N(0 < N < 1000000). Output 只有一行输出,为整数M,即f(1)到f(N)的累加和 Sample Input 3 Sample Output 5 HINT 题意 题解:…
1968: [Ahoi2005]COMMON 约数研究 Time Limit: 1 Sec  Memory Limit: 64 MB Submit: 2351  Solved: 1797 [Submit][Status][Discuss] Description Input 只有一行一个整数 N(0 < N < 1000000). Output 只有一行输出,为整数M,即f(1)到f(N)的累加和. Sample Input     3 Sample Output     5 HINT   S…
[BZOJ1968]约数研究(数论) 题面 BZOJ链接(题目是图片形式的) 题解 傻逼题 \(NOIP\) \(T1\)难度 不会做的话您可以退役 #include<iostream> #include<cstdio> #include<cstdlib> #include<cstring> #include<cmath> #include<algorithm> #include<set> #include<map&…
http://www.lydsy.com/JudgeOnline/problem.php?id=1968 换个角度 一个数可以成为几个数的约数 #include<cstdio> #include<iostream> using namespace std; int main() { int n; ; scanf("%d",&n); ;i<=n;++i) ans+=n/i; cout<<ans; } 1968: [Ahoi2005]COM…
数论 原谅我这么傻逼的题都不会做…… 或许写成数学公式的形式比较容易想到解法? $$ans=\sum_{i=1}^n \sum_{d|i} 1$$ ……是不是感觉很水呀……是吧……改成先枚举d再枚举 i 看看…… $$ans=\sum_{d=1}^n \sum_{d|i} 1=\sum_{d=1}^n \lfloor\frac{n}{d}\rfloor$$ 果然我是个傻逼…… /***********************************************************…
题目传送门 约数研究 题目描述 科学家们在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)的总和.…
1968: [Ahoi2005]COMMON 约数研究 Time Limit: 1 Sec  Memory Limit: 64 MB Submit: 2939  Solved: 2169 [Submit][Status][Discuss] Description Input 只有一行一个整数 N(0 < N < 1000000). Output 只有一行输出,为整数M,即f(1)到f(N)的累加和. Sample Input 3 Sample Output 5 题解 我们知道一个数x的约数个数…
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,要求求…
发现luogu的UI改版后AC以后不能给题目评定难度了…… P1403 [AHOI2005]约数研究 类似素数筛的一道题,不过是约数. 先顺手写了个暴力做法,TLE定了~ #include<bits/stdc++.h> using namespace std; ]; int main() { scanf("%d",&n); ; i<=n; i++) { ; j<=i; j++) )sum[i]++; sum[i]+=sum[i-]; } printf(&…
题目描述 科学家们在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)的总和. 输入输出格式 输入格式…
(有种失踪人口回归的感觉) 约束研究[传送门] (不过好像没有人注意到我这个蒟蒻) 好的不管它啦 最近学数论比较多,所以可能会有好多好多的数论题???(不存在的) 行吧上算法标签: 数论   数论   数论 首先显然它求的是Σψ(i)i∈(1,n)下面补充关于ψ(i)的百度百科知识(或许有些奇怪……): 行吧那个长得像裤子的东西是求积(和西格玛差不多吧??) 接下来讲一下原理: 我们可以反过来考虑,显然如果分别求1-n中每个数的正约数个数,我们会炸掉的(tle喽),所以我们就反向思维,对于每个数…
Description Input 只有一行一个整数 N(0 < N < 1000000). Output 只有一行输出,为整数M,即f(1)到f(N)的累加和. Sample Input 3 Sample Output 5 HINT   Source Day2 思路:枚举约数即可. #include <iostream> #include <cstdio> using namespace std; int main() { ; scanf("%d"…
#include<cstdio> #include<iostream> #define M 1000008 using namespace std; long long tot,f[M],sum[M],ans,n,b[M],p[M]; int main() { scanf("%d",&n); ans=; ;i<=n;i++) { if(!b[i]) { tot++; p[tot]=i; sum[i]=; f[i]=; } ;j<=tot;j+…
其实打个表就会发现,这个玩意儿是积性的,然后很happy的搞了一下. 不,不是这样. 考虑每个约数对答案的贡献,不难发现:约数i的贡献为n/i. 加之即可. #include<iostream>#include<cstdio>using namespace std;int n,sum=0;int main(){ scanf("%d",&n); for (int i=1;i<=n;i++) sum=sum+n/i; printf("%d&q…
本题的思想很好,正难则反 首先如果暴力枚举每个数的约数个数,一定会超时,那么我们就从约数的角度考虑,题目中问的是1~n的约数个数和,那么我们就枚举约数,看每个约数在1~n中出现过几次. #include <iostream> #include <cstdio> #include <cstring> #include <cstdlib> #include <algorithm> #include <cmath> using namesp…
Description Input 只有一行一个整数 \(N\). Output 只有一行输出,为整数 \(M\),即 \(f(1)\) 到 \(f(N)\) 的累加和. Sample Input 3 Sample Output 5 HINT \(0 < N < 1000000\) Solution [线性筛约数个数] 设 \(d[i]\) 表示 \(i\) 的约数个数,\(num[i]\) 表示 \(i\) 的最小质因子的出现次数. 若 \(i=p_1^{k_1}p_2^{k_2}\cdot…
原题链接 https://www.luogu.org/problemnew/show/P1403 这个好难啊,求约数和一般的套路就是求1--n所有的约数再一一求和,求约数又要用for循环来判断......恩--......貌似很简单,看一下n的范围:100%N<=1000000......额,看来要炸 那么怎么办呢?这时候我们就要用玄学啦当然要耐心枚举几个数找找规律啦! 从洛谷题解里看到一位大佬的约数表,再看他详细的解释,终于明白了这个题的玄学所在,放约数图!!! 我们通过这个表可以发现: 在1…
欢迎访问~原文出处——博客园-zhouzhendong 去博客园看该题解 题目传送门 - BZOJ1968 题意概括 求 ΣF(i)   (1<=i<=n)N<=1000000 F(i)是i的约数个数 题解 换一个角度思考,可以把原问题转化为: 对于每一i,在1~n中有多少个倍数,所有的个数和就是答案. 那么,ΣF(i) = ∑ floor(n/i) 代码 #include <bits/stdc++.h> int n,ans=0; int main(){ scanf(&quo…
题意 令\(f(i)\)表示\(i\)的约数个数,求\(\Sigma^n_{i=1}f(i)\). 做法 我们直接算每个数的贡献,问题可以转化成每个数在\(1\)到\(n\)中有多少个倍数,累加答案. 代码 #include<iostream> using namespace std; int main() { int ans=0,n; cin>>n; for (int i=1;i<=n;++i) ans+=n/i; cout<<ans<<endl;…
对于i属于[1,n],i只能成为[1,n]中n/i个数的约数,易证. #include<stdio.h> int n,i; long long ans; int main() { scanf("%d",&n); ;i<=n;i++)ans+=(long long)n/i; printf(; }…
题目链接:http://www.lydsy.com/JudgeOnline/problem.php?id=1968 题意: 设f(x) = x约数的个数.如:12的约数有1,2,3,4,6,12,所以f(12) = 6. 给定n,问你f(1)到f(n)之和. 题解: 好多做法... (1)O(N*sqrt(N)) 纯暴力(应该过不了). 枚举i,sqrt(i)复杂度求出约数个数,更新ans. 不附代码. (2)O(N*log(N)) 若当前枚举到i,则i为i*k的一个约数(k >= 0),dp[…
https://www.luogu.org/problemnew/show/P1403 可以直接用线性筛约数个数求出来,但实际上n以内i的倍数的个数为n/i的下整,要求的其实是 $$\sum\limits_{i=1}^{n}\lfloor\frac{n}{i}\rfloor$$ 可以直接分块搞出来. 甚至整除分块都可以优化: https://www.luogu.org/problemnew/solution/SP26073…
枚举约数,加上有这个约数的数个数 #include<iostream> #include<cstdio> using namespace std; const int N=1000005; int n; long long ans; int main() { scanf("%d",&n); for(int i=1;i<=n;i++) ans+=n/i; printf("%lld\n",ans); return 0; }…
[题目链接] 点击打开链接 [算法] 要求M,显然可以通过约数个数定理从1..N暴力计算答案,然而n最大10^6,这个算法的时间复杂度是 O(N * sqrt(N))的,不能通过此题 因此我们换一种思路 不妨考虑每个数对答案的“贡献”,若这个数为i,那么1..n中,共有n / i个数是i的倍数,那么i对答案的“贡献” 就是n / i,因此答案应该是 sigma(n / i) (1 <= i <= n) [代码] #include<bits/stdc++.h> using names…
题意:记$f(n)$为$n$的约数个数,求$\sum_{i=1}^n f(i)$,$n \leq 10^6$. 我也不知道为什么我要来做这个- 直接枚举每个数会是哪些数的约数-复杂度$O(n log n)$ #include<cstdio> typedef long long lint; int n;lint ans; int main() { scanf("%d",&n); for(register int i=1;i<=n;i++) for(registe…