51nod 1225 余数之和
2017-10-13 22:00
211 查看
这题就是求∑n1n−(n/i)∗i=n∗n−∑n1(n/i)∗i。比如说:n=20,n/11=1,n/20=1,这样就可以分段来求解了。即某一段内的x,n/x的值都是相等的。某一段的开头是i,则这一段的结尾就是n/(n/i),然后n/(n/i)+1为下一段开头,一直到n。。。
#include <bits/stdc++.h> using namespace std; typedef long long LL; LL mod=1000000007; LL trev=0; LL mpow(LL a,LL b) { LL ret = 1; while(b) { if(b&1) ret=(ret*a)%mod; a=(a*a)%mod; b>>=1; } return ret; } LL sum(LL l,LL r) { return ((l+r)%mod)*((r-l+1)%mod)%mod*trev%mod; } int main() { ios::sync_with_stdio(false); trev = mpow(2,mod-2); LL n,r,ans=0; cin >>n; for(LL i=1; i<=n; i=r+1) { r=n/(n/i); ans=(ans+(n/i)%mod*sum(i,r)%mod)%mod; } n%=mod; cout << (n*n%mod-ans+mod)%mod <<endl; return 0; }
相关文章推荐
- 51NOD-1225 余数之和
- 51nod-1225-余数求和(分块)
- 51Nod 1225 余数之和 [整除分块]
- 51nod 1225 余数之和 数论
- [数论] 51Nod 1225 余数之和
- 51nod 1225 余数之和
- 51nod 1225 余数之和(根号n枚举)
- 51nod 1225 余数之和
- 51nod 1225 余数的和 数学
- 51Nod-1225-余数之和
- 51nod 1225
- 1225 余数之和
- 51nod 1168 . 余数之和
- 51 NOD:1225 余数之和(推公式)
- 51 Nod 1225 余数之和
- 1225 余数之和
- [分块]51 Nod——1225 余数之和
- 51nod 1225 数学
- 51nod 1433 0和5(九的余数特点)
- 51nod 1088 最长回文子串