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的约数个数 = (a1 + 1) * (a2 + 1) * (a3 + 1)......(ak + 1)
其中x的质因子分解:x = p1^a1 * p2^a2 * p3^a3 ......pk^ak
现在我们需要算出所有数的约数个数和
直接算?O(n√n)  n <= 1000000肯定超时
考虑线性筛
若i为质数,显然f[i] = 2
若i不为质数,它一定会在线性筛中被它除去最小的一个质因数后的那个数筛去
例如 20 = 2 * 2 * 5,那么在筛到10 = 2 * 5时,我们会用 2 * 10 筛去20
由于比10及10以前的f值已经确定
这个时候f[20] = f[10] + f[10 / 2^1] = (1 + 1) * (1 + 1) + (1 + 1) = 3 * 2
也就是f[i * prime[j]] = f[i] + f[i除去所有prime[j]后的数]
 
UPD2018.1.27:
其实这道题有更快的方法。。。。是我蠢了
∑[N/i]即可
#include<iostream>
#include<cstdio>
#include<cstring>
#include<algorithm>
#include<bitset>
#define LL long long int
#define REP(i,n) for (int i = 1; i <= (n); i++)
using namespace std;
const int maxn = 1000005,maxm = 100005,INF = 1000000000;
int prime[maxn],primei = 0,n;
LL f[maxn],M = 0;
bitset<maxn> isp;
void cal(){
int t;
isp.set();
f[1] = 1;
for (int i = 2; i <= n; i++){
if (isp[i]) prime[++primei] = i,f[i] = 2;
for (int j = 1; j <= primei && i * prime[j] <= n; j++){
isp[i * prime[j]] = false;
for (t = i; t % prime[j] == 0; t /= prime[j]);
f[i * prime[j]] = f[i] + f[t];
if (i % prime[j] == 0) break;
}
}
REP(i,n) M += f[i];
}
int main()
{
cin >> n;
cal();
cout << M << endl;
return 0;
}
UPD:
#include<iostream>
using namespace std;
int main(){
int n,nxt; cin>>n;
long long int ans = 0;
for (int i = 1; i <= n; i = nxt + 1){
nxt = n / (n / i);
ans += (long long int)n / i * (nxt - i + 1);
}
cout<<ans<<endl;
return 0;
}

  

[Ahoi2005]COMMON 约数研究 【欧拉线性筛的应用】的更多相关文章

  1. BZOJ 1968: [Ahoi2005]COMMON 约数研究

    1968: [Ahoi2005]COMMON 约数研究 Time Limit: 1 Sec  Memory Limit: 64 MBSubmit: 2032  Solved: 1537[Submit] ...

  2. BZOJ 1968: [Ahoi2005]COMMON 约数研究 水题

    1968: [Ahoi2005]COMMON 约数研究 Time Limit: 20 Sec Memory Limit: 256 MB 题目连接 http://www.lydsy.com/JudgeO ...

  3. BZOJ 1968: [Ahoi2005]COMMON 约数研究(新生必做的水题)

    1968: [Ahoi2005]COMMON 约数研究 Time Limit: 1 Sec  Memory Limit: 64 MB Submit: 2351  Solved: 1797 [Submi ...

  4. bzoj千题计划170:bzoj1968: [Ahoi2005]COMMON 约数研究

    http://www.lydsy.com/JudgeOnline/problem.php?id=1968 换个角度 一个数可以成为几个数的约数 #include<cstdio> #incl ...

  5. [POJ1595]欧拉线性筛(虽然这道题不需要...)

    欧拉线性筛. 对于它的复杂度的计算大概思考了很久. procedure build_prime; var i,j:longint; begin fillchar(vis,sizeof(vis),tru ...

  6. 欧拉函数O(sqrt(n))与欧拉线性筛素数O(n)总结

    欧拉函数: 对正整数n,欧拉函数是少于或等于n的数中与n互质的数的数目. POJ 2407.Relatives-欧拉函数 代码O(sqrt(n)): ll euler(ll n){ ll ans=n; ...

  7. 1968: [Ahoi2005]COMMON 约数研究

    #include<cstdio> #include<iostream> #define M 1000008 using namespace std; long long tot ...

  8. BZOJ1968: [Ahoi2005]COMMON 约数研究 线性筛

    按照积性函数的定义筛一下这个积性函数即可. #include <cstdio> #include <algorithm> #define N 1000004 #define s ...

  9. BZOJ1968 [Ahoi2005]COMMON 约数研究 数论

    欢迎访问~原文出处——博客园-zhouzhendong 去博客园看该题解 题目传送门 - BZOJ1968 题意概括 求 ΣF(i)   (1<=i<=n)N<=1000000 F( ...

随机推荐

  1. 这样的SQL居然能执行

    select /*! distinct   cities.id from cities  join countries on cities.id = countries.id limit 10 */;

  2. 初识java atomic

    2018-8-19 昨天看到java.util.concurrent.atomic相关的文章,之前有过留意但并未去了解,正好有空学习一下.本人理解atomic包是concurrent子包,当是为并发所 ...

  3. adb获取设备的序列号

    用数据线连接手机, 打开开发者模式, 并赋予相关权限, 在CMD命令行输入: adb devices 第一个参数即为设备的序列号, 第二个参数device表示设备的状态是在线.

  4. mysql新手进阶03

    当年忠贞为国酬,何曾怕断头? 如今天下红遍,江山靠谁守? 业未就,身躯倦,鬓已秋. 你我之辈,忍将夙愿,付与东流? 数据库结构如下: 仓库(仓库号, 城市, 面积) 订购单(职工号, 供应商号, 订购 ...

  5. 使用jenkins构建一个自由风格的项目

    一.创建一个freestyle风格的构建项目 二.输入任务名称和选择任务类型 三.配置项目 3.1:选择代码托管 3.2:到gitlab上去配置deploy key 3.3:到jenkins服务器去生 ...

  6. Unity热更新文件的服务器部署(IIS)

    1.VS新建一个"ASP.NET空网站" 工程结构如下 最好设置.Net FrameWork版本为 V4.0或者V4.5版本的,因为我们的程序最后是要部署到阿里云的虚拟服务器上的, ...

  7. Pandas基础教程

    pandas教程 更多地可以 参考教程 安装 pip install pandas pandas的类excel操作,超级方便: import pandas as pd dates = pd.date_ ...

  8. Tic-Tac-Toe

    Description Kim likes to play Tic-Tac-Toe. Given a current state, and now Kim is going to take his n ...

  9. Android - TabHost 选项卡功能用法详解

    TabHost效果图 : 源码下载地址 : http://download.csdn.net/detail/han1202012/6845105        . 作者 :万境绝尘  转载请注明出处  ...

  10. MongoDb Driver For Net

    由于mongodb开源github提供的net驱动都比较新,从2.3及以上版本都是netcore系列了,netframework至少都是4.6以上,且提供的dll并没有签名, 这就产生了一些问题 1 ...