zoukankan      html  css  js  c++  java
  • Evanyou Blog 彩带

      题目传送门

    约数研究

    题目描述

    科学家们在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)的总和。

    输入输出格式

    输入格式:

     

    输入一行,一个整数n

     

    输出格式:

     

    输出一个整数,表示总和

     

    输入输出样例

    输入样例#1: 
    3
    
    输出样例#1: 
    5
    

    说明

    【数据范围】

    20%N<=5000

    100%N<=1000000


      分析:

      没错,这是一道非常水的题,但也是一道非常好的数论分块入门题。

      求$1$~$n$的约数个数的和可以转换成求包含$1$~$n$的数的个数和,所以答案就是$sum^n_{i=1}frac{n}{i}$。

      但是如果数据范围再大点,比如$nleq 10^{14}$?这就需要用到数论分块。

      对于某几个$i$,实际上$frac{n}{i}$的结果都是一样的,所以我们可以直接跳过这一部分,跳到某一个$j$使得$frac{n}{j}=frac{n}{i}+1$。这就是数论分块的基本思想。

      Code:

      

    //It is made by HolseLee on 12th Sep 2018
    //Luogu.org P1403
    #include<cstdio>
    int main()
    {
        int n,ans=0; scanf("%d",&n);
        for(int i=1,j; i<=n; i=j+1) {
            j=n/(n/i); ans+=(n/i)*(j-i+1);
        }
        printf("%d",ans); return 0;
    }
  • 相关阅读:
    Linux系统安装IonCube的方法详解教程
    CentOS7 安装 odoo10
    关于WPF的弹出窗口
    WPF命令使用
    WPF访问UserControl的自定义属性和事件
    一步步实现 Prism + MEF(二)--- 绑定命令
    一步步实现 Prism + MEF(一)--- 搭建框架
    MVVM里绑定TreeView控件的SelectedItem
    MAF框架的使用限制
    排序--归并排序算法
  • 原文地址:https://www.cnblogs.com/cytus/p/9641540.html
Copyright © 2011-2022 走看看