XOJ Divisor counting

Divisor counting

Let σ(n) denote the number of divisors of n.

Compute σ(1)+σ(2)++σ(n).

Input

An integer n.

(1n10^14)

Output

The sum.

Sample input

5

Sample output

10

直接枚举,枚举技巧:只要枚举到sqrt(n),另一半可以根据(n/i+n/(i+1))*i得出。。
View Code
 1 #include<iostream>
 2 #include<cstdio>
 3 #include<cmath>
 4 using namespace std;
 5 int main()
 6 {
 7     long long n;
 8     while(~scanf("%lld",&n))
 9     {
10         int sqr=sqrt(1.0*n);
11         long long sum=0;
12         for(int i=1;i<=sqr;i++)
13         {
14             sum+=n/i;
15             sum+=(n/i-n/(i+1))*i;
16         }
17         if(sqr==n/sqr)
18             sum-=sqr;
19         printf("%lld\n",sum);
20     }
21     return 0;
22 }

 

posted on 2013-02-05 20:37  acoderworld  阅读(73)  评论(0)    收藏  举报

导航