Codeforces 616E Sum of Remainders
2016-01-12 23:25
501 查看
题意
给你两个数n,m问你n % 1 + n % 2 + … + n% m为几
思路
n % i = n - n / i * i (n / i 表示下取整)所以所求 = n * m - sum(n/i * i) (i从1到m)
由于,n的第j个因子和第j+1个因子间(左开右闭),的任意数k,有n / k = n / n的第j+1个因子
所以我们用sqrt(n)的时间求出所有n的因子即可,然后相邻的两个用下等差数列求和公式很容易就能算出
求得过程有些坑点需要注意,首先是注意m的大小,m的大小可能位于n的两个因子之间
然后是,求和公式那里也需要先求下余,再算乘法,这样就需要注意因为有个除2,所以要判断用哪一项能整除2,除完后再求余
实现
#include <bits/stdc++.h> using namespace std; #define fi first #define se second #define mp make_pair #define pb push_back typedef long long ll; typedef pair<ll,ll> pii; const ll mod = 1e9+7; ll n,m; ll ans; vector<pii> vec; inline ll sum(ll a1,ll an){ if ((an-a1) % 2 == 0){ return (((a1+1 + an) % mod) * (((an - a1) / 2) % mod)) % mod; } else{ return ( ( (a1+1 + an) / 2 % mod) * ( (an - a1) % mod)) % mod; } } int main(){ cin>>n>>m; ans = (n % mod) * (m % mod) % mod; vec.pb(mp(0,0)); for (ll i=1;i*i<=n;i++){ ll tmp = n / i; vec.pb(mp(i,tmp)); if (i != tmp) vec.pb({tmp,i}); } sort(vec.begin(),vec.end()); int i; for (i=1;i<vec.size() && m>=vec[i].fi;i++){ ans = (ans - (sum(vec[i-1].fi,vec[i].fi) * (vec[i].se % mod)) % mod + mod) % mod; } if (m < n){ ans = (ans - (sum(vec[i-1].fi,m) * (vec[i].se % mod)) % mod + mod) % mod; } cout << ans << endl; return 0; }
相关文章推荐
- batch.bat explaination
- InvalidateRect只是增加重绘区域,在下次WM_PAINT的时候才生效
- CodeForces 615B Longtail Hedgehog
- CF-edu#5 E - Sum of Remainders -数学-枚举
- netstat -pnat 出现大量的CLOSE_WAIT
- iptables:应用防火墙规则:ptables-restore: line 13 failed [失败]
- Installation error: INSTALL_FAILED_VERSION_DOWNGRADE
- sendmail 报错:unable to qualify my own domain name
- jenkins Email-EXT plugins
- 解决错误error: RPC failed; result=56, HTTP code = 200
- Xcode6中去掉默认的Main.storyboard
- 解决RHadoop错误:PipeMapRed.waitOutputThreads(): subprocess failed with code 1
- FIN_WAIT1 能持续多久?你知道吗
- NSSearchPathForDirectoriesInDomains和NSHomeDirectory
- 人工智能之优化算法1-蚁群优化算法
- raiserror的用法
- Daily Scrum – 1/12
- STM32学习【1】ERROR:RAM check failed @ADDRESS 0x20000000
- log4j:WARN No such property [maxBackupIndex] in org.apache.log4j.DailyRollingFil
- Storm ack和fail机制再论