1968: [Ahoi2005]COMMON 约数研究

Description

Input

只有一行一个整数 N(0 < N < 1000000)。

Output

只有一行输出,为整数M,即f(1)到f(N)的累加和。

Sample Input

3

Sample Output

5

  这一定是一道水题,当时因为这是练习积性函数的“好机会”,结果发现自己实在想得太复杂。0 < N < 1000000,因数不会超过这个界限,那么跑一遍就完了。代码也不用挂了。(52ms)

  但我发现,也可以欧拉筛。(288 ms)

  当然,还可使用区间乱跳,O(1)算出n div i为一定值的区间,而这种区间是O(sqrt(n))的。(0 ms)

 1 /**************************************************************
 2     Problem: 1968
 3     User: Doggu
 4     Language: C++
 5     Result: Accepted
 6     Time:288 ms
 7     Memory:13516 kb
 8 ****************************************************************/
 9
10 #include <cstdio>
11 const int SIZE= 1000000;
12 int prime[SIZE], pri, n;
13 bool vis[SIZE+10];
14 long long  ans, tao[SIZE+10];
15 void EULER(int upper_bound) {
16     tao[1]=1;
17     for( long long i = 2; i <= upper_bound; i++ ) {
18         if(!vis[i]) {
19             prime[++pri]=i;
20             tao[i]=2;
21         }
22         for( int t = 1; t <= pri; t++ ) {
23             long long j = i*prime[t];
24             if(j>upper_bound) break;
25             vis[j]=1;
26             tao[j]=tao[i]*tao[prime[t]];
27             if(i%prime[t]==0) {
28                 long long a = i,tot=0;
29                 while(a%prime[t]==0) a/=prime[t],tot++;
30                 tao[j]=tao[a]*(tot+2);
31                 break;
32             }
33         }
34     }
35 }
36 int main() {
37     scanf("%d",&n);
38     EULER(n+10);
39     for( int i = 1; i <= n; i++ ) ans+=tao[i];
40     printf("%lld\n",ans);
41     return 0;
42 }

EULER

转载于:https://www.cnblogs.com/Doggu/p/bzoj1968.html

BZOJ 1968 [Ahoi2005]COMMON 约数研究相关推荐

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

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

  2. bzoj 1968: [Ahoi2005]COMMON 约数研究【枚举】

    枚举约数,加上有这个约数的数个数 #include<iostream> #include<cstdio> using namespace std; const int N=10 ...

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

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

  4. bz1968 1968: [Ahoi2005]COMMON 约数研究

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

  5. BZOJ-1968: [Ahoi2005]COMMON 约数研究 (思想)

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

  6. [AHOI2005]COMMON 约数研究

    https://www.luogu.org/problemnew/show/P1403 https://www.lydsy.com/JudgeOnline/problem.php?id=1968 题解 ...

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

    [传送门:BZOJ1968] 简要题意: 给出n,求出1的约数个数+2的约数个数+...+n的约数个数 题解:  乍一眼还挺容易理解,但是看数据范围,懵逼 好吧,说实话,我是看数据规律才知道怎么做的 ...

  8. [BZOJ1968][AHOI2005]COMMON约数研究 数学

    题目链接:http://www.lydsy.com/JudgeOnline/problem.php?id=1968 直接计算每个因子的贡献就可以了. $Ans=\sum_{i=1}^n[\frac{n ...

  9. bzoj1968【AHOI2005】COMMON 约数研究

    1968: [Ahoi2005]COMMON 约数研究 Time Limit: 1 Sec   Memory Limit: 64 MB Submit: 1492   Solved: 1139 [ Su ...

最新文章

  1. 第三方登录 (faceBook )
  2. 正则表达式调用“或”变量
  3. SqlServer2005高效分页sql查询语句汇总
  4. 基于matlab/simulink的PMSM直接转矩控制和bangbang控制
  5. ACM公选课第八节DP基础3 2020.4.23-5.10补
  6. 【uniapp】swiper 自定义轮播图指示点
  7. React总结篇之六_React高阶组件
  8. NUMTRYE - Number Theory (Easy)
  9. t-sql中的事务控制及错误处理
  10. python 匿名函数 day15
  11. 中职计算机基础知识总结,中职计算机基础知识整理
  12. python脚本多文件搜索查询字符串关键字
  13. 浅谈ARM Cortex-M0
  14. 修改计算机照片格式怎么修,电脑上如何修改照片文件大小?2种免费方法简单解决...
  15. Base64在线转换工具
  16. layui.laydate默认当前时间时分秒
  17. 百度360腾讯竞购搜狗
  18. 优思学院|准时化生产(JIT)是什么?
  19. 晶体管发明往事:误打误撞,反目成仇,共享诺贝尔奖
  20. 算法之地推算法(逆推法)

热门文章

  1. K8S完整部署项目实战案例
  2. Python Django 配置admin后台管理类代码示例
  3. vue定义一个变量并显示
  4. 请解释一下Java多线程回调是什么意思?
  5. nginx lua示例
  6. JMM主内存和工作内存运行流程图
  7. Random类实例--猜数字游戏
  8. spring boot整合mybatis+通用mapper+pagehelper分页插件
  9. oracle 修改聚簇因子,Oracle 基础篇 --- 聚簇因子(clustering_factor)
  10. edittext 选中焦点在最后_安卓开发中EditText的焦点改变处理(获取焦点和失去焦点交互变化)...