XOJ Divisor counting
Divisor counting
Let σ(n) denote the number of divisors of n.
Compute σ(1)+σ(2)+⋯+σ(n).
Input
An integer n.
(1≤n≤10^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) 收藏 举报

浙公网安备 33010602011771号