题目链接: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[i*k]++。

      先枚举i,再枚举i*k,复杂度 = n * (1 + 1/2 + 1/3 + 1/4 +...+ 1/n) = N*log(N)

  (3)O(N)

      转化问题:

        设g(x) = [1,n]中x倍数的个数。

        ans = ∑ g(i)

      显然有g(x) = floor(n/x),O(1)算出。

      枚举i,ans += g(i),复杂度O(N)。

  (4)O(sqrt(N))

      延续(3)的思路。

      显然,对于数列g(x),你会发现有一些区间内的数都是一样的。

      那么哪些g(x)会是相同的呢?

        假如现在枚举到了i。

        由于 g(x) = floor(n/i)

        所以有 n/i = g(i) ... P(余数)

        那么现在想求出这段区间的末尾位置j,即求出满足n/j = g(i) ... P,显然当P(余数)越接近0时,j越大。

        所以当P约等于0时,末尾位置j = floor(n/g(i)) = floor(n/floor(n/i))。

        所以下一个区间的起始位置为j+1。

      所以对于处理的每个i,要将ans += (j-i+1) * g(i)

      复杂度 = 不同的floor(n/i)的个数 = sqrt(N)

  看下效率差距。。。(从下往上为算法2,3,4)

  

AC Code(2):

 #include <iostream>
#include <stdio.h>
#include <string.h>
#define MAX_N 1000005 using namespace std; int n;
int ans=;
int dp[MAX_N]; int main()
{
cin>>n;
memset(dp,,sizeof(dp));
for(int i=;i<=n;i++)
{
for(int j=i;j<=n;j+=i)
{
dp[j]++;
}
ans+=dp[i];
}
cout<<ans<<endl;
}

AC Code(3):

 #include <iostream>
#include <stdio.h>
#include <string.h> using namespace std; int n;
int ans=; int main()
{
cin>>n;
for(int i=;i<=n;i++)
{
ans+=n/i;
}
cout<<ans<<endl;
}

AC Code(4):

 #include <iostream>
#include <stdio.h>
#include <string.h> using namespace std; int n;
int ans=; int main()
{
cin>>n;
for(int i=,j=;i<=n;i=j+)
{
j=n/(n/i);
ans+=(j-i+)*(n/i);
}
cout<<ans<<endl;
}

BZOJ 1968 [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 1968: [Ahoi2005]COMMON 约数研究【枚举】

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

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

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

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

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

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

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

  8. [Ahoi2005]COMMON 约数研究 【欧拉线性筛的应用】

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

  9. BZOJ1968 [Ahoi2005]COMMON 约数研究

    Description Input 只有一行一个整数 N(0 < N < 1000000). Output 只有一行输出,为整数M,即f(1)到f(N)的累加和. Sample Input ...

随机推荐

  1. javascript之正则表达式基础知识小结

    javascript之正则表达式基础知识小结,对于学习正则表达式的朋友是个不错的基础入门资料.   元字符 ^ $ . * + ? = ! : | \ / ( ) [ ] { } 在使用这些符号时需要 ...

  2. GroundPlaneEstimator.cpp解读

    GroundPlaneEstimator域下的compute函数,就相当于整个cpp的主函数,也体现了整个调用过程,先执行compute_v_disparity_data,再compute_v_dis ...

  3. 使用vba doc转docx

    创建vbs文件,doctodocx.vbs内容如下: '创建一个word对象 set wApp=CreateObject("word.Application") '获取文件传递到参 ...

  4. intellig idea中jsp或html数据没有自动保存和更换字体

    主题一:保存数据jsp intellig idea是自动保存数据的,看到没有保存 解决方案: 成功解决 主题二:更换字体: 或者快捷键Ctel+Alt+s 成功解决

  5. Java运行时异常与一般异常以及错误的异同

    Java提供了两类主要的异常:runtime exception和checked exception.checked 异常也就是我们经常遇到的IO异常,以及SQL异常都是这种异常.对于这种异常,JAV ...

  6. yarn默认配置

    name value description yarn.ipc.client.factory.class   Factory to create client IPC classes. yarn.ip ...

  7. js读取跨域webapi传送回来的cookie 要点

    1.webapi 返回cookie时,httpOnly=false 2.webapi 接收Origins 不能为* 3.js端 请求时,withCredentials必须: true   //`wit ...

  8. 20.springboot项目部署到linux服务器文件上传临时路径处理问题

    1.前言 把项目部署到服务器上之后,文件上传默认会在/tmp路径中. 之前想了各种解决办法,比如如何更改这个上传路径...... 最后发现不是个好的方法,当然就想到了更好的解决方案. 就是我把上传文件 ...

  9. django-单表操作

    #######单表操作######## 前面视图层,模板层.路由层都写了大概,项目肯定是会和数据库打交道,那就讲讲orm的单表查询吧,直接写过一点点,不太全面. 1.项目刚创建好,我们需要在setti ...

  10. ABAP术语-Interface

    Interface 原文:http://www.cnblogs.com/qiangsheng/archive/2008/02/22/1077086.html Information tool that ...