LS 15 Divisor counting (Easy)(数论)
Divisor counting (Easy)
Let
Compute
Input
An integer
Output
The sum.
Sample input
5
Sample output
10
思路:
计算 [1, X]区间内所有数字的因子个数之和这个等价于X / 1 + X / 2 + ... + X / X,
这里注意是整除,直接暴力(O(X)超时),所以就要分段求;
例如:X/[i………j]==X[k](i<=k)<=j,没必要i……..j都求一次,(详情看代码1)
#include<iostream> #include<cstring> using namespace std; int sum; int n; int main() { int x; while(cin>>n) { sum=0; for(int i=1;i*i<=n;i++) { ///能被i整除的数有多少个 x=n/i; sum+=x; if(x^i) {///能被x+k[0,z]整除为i的数有多少个 sum+=i*(x-n/(i+1)); } } cout<<sum<<"\n"; } }
The article write by nealgavin