zoukankan      html  css  js  c++  java
  • 约数研究

    【题目描述】

    统计每个正数N的约数个数,并用f(N)来表示。

    例如12的约数有1、2、3、4、6、12,因此f(12)=6,下表给出了一些f(N)的取值:

    f(N)表示N的约数个数,现在给定N,询问f(1)~f(N)的总和为多少。

    【输入描述】

    输入一个整数N。

    【输出描述】

    输出一个整数,表示答案。

    【输入样例】

    3

    【输出样例】

    5

    【数据范围及提示】

    对于20%的数据,N <= 5000;

    对于100%的数据,N <= 1000000。

    源代码:
    
    #include<cstdio>
    int n,Ans(0);
    int main()
    {
        scanf("%d",&n);
        for (int a=1;a<=n;a++)
          Ans+=n/a;
        printf("%d",Ans);
        return 0;
    }
    
    /*
        很水的一道题,不过还挺考察变向思维的。
        从总体出发,考虑1~N中的每个数是多少数的约数,累加就可以了。
        一开始想到了昨天数论课上的公式:
            (1)唯一分解定理:
                N=(p1^k1)*(p2^k2)*...*(pn^kn);
            (2)约数个数函数:
                T(N)=(1+k1)*(1+k2)*...*(1+kn);
            (3)约数和函数:
                S(N)=(1+p1+p1^2+...+p1^k1)*(1+p2+p2^2...+p2^k2)*...*(1+pn+pn^2+...+pn^kn);
        数论真是博大精深。
    */
  • 相关阅读:
    博客园的商业模式
    读书单
    VC++学习笔记
    技术话题
    vc+学习遇到的问题
    常见的Java问题排查方法
    MSDN Library for vs 2010 下载和安装
    WT19i刷机过程
    随记
    WT19i的刷机
  • 原文地址:https://www.cnblogs.com/Ackermann/p/6054096.html
Copyright © 2011-2022 走看看