ZOJ 3175 Number of Containers(n/1+n/2+...+n/(n-1)+n/n求法)
2017-01-18 20:14
549 查看
将题目所求转化下,即为: n/1+n/2+…+n/(n-1)+n/n求和后-n;
由于n较大,无法一层for解决;画图,对于这样n/x的反函数图像,中心点为[sqrt(n),sqrt(n)]
然后算那个分式的和的话不能O(N),发现n不变,就随手画了个n/x的函数,如下图是y=10/x的函数图;
我们发现这个函数图像是和y=x对称的,这个是其次,然后顺着这个感觉,可以发现,我们从1枚举到sqrt(n),在1的时候10/1=10,在2的时候10/2=5,我们可以很显然的得知,在对应y的区间 (5,10] 对于10/x来说的答案都是1,然后在3的时候10/3=3,我们又能发现y的范围在区间(3,5]上的答案都是2。对于n=10这个情况,在枚举 [1 , sqrt(n)] 每次加上n/i,并且加上对应之前 ( n/(i-1) , n/i ] 的答案都是i-1 ,这样我们对于10这样正好处理了1到n所有的数。
但是如果是20的话,sqrt(20)=4,这样简单加到了4,我们发现我们对于区间的处理都是前闭后开,所以在i=4时,没有处理n/i=5的情况,所以最后还要把 (sqrt(n) , n/sqrt(n)] 这个区间里的答案都加上;然而爆long long wa了一发;
由于n较大,无法一层for解决;画图,对于这样n/x的反函数图像,中心点为[sqrt(n),sqrt(n)]
然后算那个分式的和的话不能O(N),发现n不变,就随手画了个n/x的函数,如下图是y=10/x的函数图;
我们发现这个函数图像是和y=x对称的,这个是其次,然后顺着这个感觉,可以发现,我们从1枚举到sqrt(n),在1的时候10/1=10,在2的时候10/2=5,我们可以很显然的得知,在对应y的区间 (5,10] 对于10/x来说的答案都是1,然后在3的时候10/3=3,我们又能发现y的范围在区间(3,5]上的答案都是2。对于n=10这个情况,在枚举 [1 , sqrt(n)] 每次加上n/i,并且加上对应之前 ( n/(i-1) , n/i ] 的答案都是i-1 ,这样我们对于10这样正好处理了1到n所有的数。
但是如果是20的话,sqrt(20)=4,这样简单加到了4,我们发现我们对于区间的处理都是前闭后开,所以在i=4时,没有处理n/i=5的情况,所以最后还要把 (sqrt(n) , n/sqrt(n)] 这个区间里的答案都加上;然而爆long long wa了一发;
#include<bits/stdc++.h> using namespace std; typedef long long LL; int main() { int T; scanf("%d",&T); while(T--) { LL n; scanf("%lld",&n); LL sum=0; LL q=sqrt(n); sum=n; for(LL i=2;i<=q;i++) { sum=sum+n/i; sum=sum+(i-1)*(n/(i-1)-n/i); } if(n/q>q) { sum=sum+q*(n/q-n/(q+1)); } printf("%lld\n",sum-n); } return 0; }
相关文章推荐
- zoj 3175 Number of Containers(数论~)
- TOJ 2909 ZOJ 3175 Number of Containers / 数论
- zoj 3175 Number of Containers (大数灵活题,除2改成平方根)
- zoj 3175 Number of Containers
- ZOJ 3175 Number of Containers 【数学图像性质(一个常见算式的经典计算)】
- zoj 3175 Number of Containers 分块加速
- zoj 3175 Number of Containers (nbut1375) 计算n /1+n/2+n/3+n/4....+n/n
- ZOJ - 3175 Number of Containers
- Number of Containers [ZOJ 3126]
- Number of Containers(数学)
- ZOJ 2523 —— Number of People(数论,胡搞)
- Codeforces 27E Number With The Given Amount Of Divisors
- [LeetCode 200] Number of Islands
- OpenCV count the number of connected camera 检测连接的摄像头的数量
- Data Structure Array: Given an array of of size n and a number k, find all elements that appear more than n/k times
- POJ 2699 The Maximum Number of Strong Kings Description
- 递推-nyoj-The number of maximum subset
- LeetCode(4) - Letter Combinations of a Phone Number
- [leetcode 452]Minimum Number of Arrows to Burst Balloons
- LeetCode Letter Combinations of a Phone Number 经典组合问题