UVa 11526 H(n)
2015-02-12 17:56
225 查看
题意:
long long H(int n){
long long res = 0;
for( int i = 1; i <= n; i=i+1 ){
res = (res + n/i);
}
return res;
}
求这样一个函数的值。
分析:
这个题很像我做莫比乌斯反演时的一个分块加速的优化。
注意到n/i的整数部分,有许多重复的数。具体一点,对于某一个i,在区间[i, n / (n / i)]中n/i的值是一样的。
例如在[17, 20]中的i,100/i的值都是5.
代码君
找到一份更快的代码,但是题解看得十分不懂,一头雾水,=_=||
UVa 11526 H(n) (数论)
long long H(int n){
long long res = 0;
for( int i = 1; i <= n; i=i+1 ){
res = (res + n/i);
}
return res;
}
求这样一个函数的值。
分析:
这个题很像我做莫比乌斯反演时的一个分块加速的优化。
注意到n/i的整数部分,有许多重复的数。具体一点,对于某一个i,在区间[i, n / (n / i)]中n/i的值是一样的。
例如在[17, 20]中的i,100/i的值都是5.
#include <iostream> #include <cstdio> using namespace std; int main() { int T; long long n; scanf("%d", &T); while(T--) { scanf("%lld", &n); long long ans = 0; for(long long i = 1, j; i <= n; i = j+1) { j = n / (n / i); if(j > n) j = n; ans += (j-i+1) * (n/i); } printf("%lld\n", ans); } return 0; }
代码君
找到一份更快的代码,但是题解看得十分不懂,一头雾水,=_=||
UVa 11526 H(n) (数论)
相关文章推荐
- uva 11526 H(n) (数论)
- UVA 11526(p344)----H(n)
- UVA 11526 H(n)
- UVA-11526H(n)(数论)
- UVa 11526 - H(n)
- UVA_11526 H(n)
- H(n) UVA - 11526
- Uva-11526 H(n)
- uva 11526
- UVA 11526 - H(n)
- UVa 11526 - H(n)
- uva 11526 H(n)
- UVa 11526 H(n) (数论)
- uva 11526计算n/1+n/2+...+n/n(整除)
- 【数论,找规律】Uva 11526 - H(n)
- (UVA - 11526) H(n)
- UVA 11526 H(n)
- UVA - 11526 H(n) (数学)
- UVa 11526 - H(n)
- UVa 11526 - H(n) [数学]