题目链接: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. CF526D Om Nom and Necklace

    嘟嘟嘟 我们可以把AB看成S,则要找的串可以写成SSSSA或者SSSSS.假设S出现了Q次,那么A出现了Q % k次,则B出现了 Q / k - Q % k次. 当ABABA是SSS的形式时,B可以为 ...

  2. Linux云主机 监控方案浅析

    1.为何需要监控 监控是运维工程师的眼睛,它可帮助运维工程师第一时间发现系统的问题. 对于服务器的整个生命周期,都要和监控打交道: 当有服务器上架,都需要加入比如CPU负载.内存.网络.磁盘等基础监控 ...

  3. 如何在vue2.0项目中引用element-ui和echart.js

    1 项目中怎样添加elment-ui 和 echart.js 1.1直接在packjson 里面的 dependencies 配置 "element-ui": "^1.3 ...

  4. AngularJS表格排序

    <!DOCTYPE html><html><head><meta http-equiv="Content-Type" content=&q ...

  5. Nacicat for Oracle 绿色版 亲测可用

    参考: http://blog.csdn.net/u013107634/article/details/52741591 https://blog.csdn.net/zhengyikuangge/ar ...

  6. 关于math.random()的问题

    今天在写一个关于随机数的小程序时,在程序执行时,发现随机数不能执行随机,随机结果始终为1. 下面贴上一开始错误的代码 int i = (int)Math.random()*3+1; 无论运行多少次,结 ...

  7. .net 导出Excel插件Npoi的使用

    1.NuGet搜索Npoi并安装 2.添加引用将包引用进来 3.Controller里引用 4.使用 public ActionResult ExportExcel() { plist = 数据源 H ...

  8. Java反射的两种使用方法

    1.创建User.java package com.tao.test; public class User { private String name; private int id; public ...

  9. (转)Dubbo 简单Dome搭建

    (转)原地址https://blog.csdn.net/noaman_wgs/article/details/70214612/ Dubbo背景和简介 Dubbo开始于电商系统,因此在这里先从电商系统 ...

  10. MAC系统如何显示隐藏文件解决方法

    苹果Mac OS 操作系统下,隐藏文件默认为隐藏状态,隐藏文件是否显示有多种方法可以设置. 方法一: 打开终端,输入命令行 1.显示Mac隐藏文件的命令: defaults write com.app ...