博客
关于我
强烈建议你试试无所不能的chatGPT,快点击我
Educational Codeforces Round 5 E. Sum of Remainders (思维题)
阅读量:4920 次
发布时间:2019-06-11

本文共 1424 字,大约阅读时间需要 4 分钟。

题目链接:

题意很简单就不说了。

因为n % x = n - n / x * x

所以答案就等于 n * m - (n/1*1 + n/2*2 ... n/m*m)

在根号n复杂度枚举x,注意一点当m>n时,后面一段加起来就等于0,就不用再枚举了。

中间一段x1 ~ x2 的n/x可能相等,所以相等的一段等差数列求和。

1 //#pragma comment(linker, "/STACK:102400000, 102400000") 2 #include 
3 #include
4 #include
5 #include
6 #include
7 #include
8 #include
9 #include
10 #include
11 #include
12 #include
13 using namespace std;14 typedef __int64 LL;15 typedef pair
P;16 const int N = 1e5 + 5;17 vector
myset; //存储x18 LL mod = 1e9 + 7;19 20 int main()21 {22 LL n, m;23 scanf("%lld %lld", &n, &m);24 LL k = min(m, n);25 myset.push_back(k);26 for(LL i = 1; i*i <= n; ++i) {27 myset.push_back(i);28 if(i * i != n) {29 myset.push_back(n/i);30 }31 }32 sort(myset.begin(), myset.end());33 LL ans = (n%mod)*(m%mod)%mod, cnt = 0;34 for(LL i = 0; i < myset.size() && myset[i] <= k; ++i) {35 LL temp = myset[i];36 if(cnt) {37 LL num;38 if((temp - cnt) % 2)39 num = ((temp + cnt + 1) / 2 % mod) * ((temp - cnt) % mod) % mod;40 else41 num = ((temp - cnt) / 2 % mod) * ((temp + cnt + 1) % mod) % mod;42 num = ((n / temp) % mod * num) % mod;43 ans = ((ans - num) % mod + mod) % mod;44 }45 else {46 ans = (ans - n) % mod;47 }48 cnt = temp;49 }50 printf("%lld\n", (ans + mod) % mod);51 return 0;52 }
View Code

 

转载于:https://www.cnblogs.com/Recoder/p/5757753.html

你可能感兴趣的文章
eclipse打开html文件
查看>>
转csdn某位同学的 感谢bmfont
查看>>
linux 添加、删除 route
查看>>
oracle 常用的几个网址
查看>>
oracle 12.2.0.1 使用 active dataguard broker 之一
查看>>
robotframework连接mysql数据库
查看>>
iOS-远程通知
查看>>
Warcraft love Air Jordan 9 Olive
查看>>
memcached全面剖析—— 客户端选择(一致性哈希算法)
查看>>
米洛个人修炼术:情绪的四种常用处理方式,其实都是有问题的
查看>>
[翻译] Virtual method interception 虚方法拦截
查看>>
--- git-svn 使用环境和步骤
查看>>
flutter AS 打包
查看>>
Python webpy微信公众号开发之 回复图文消息
查看>>
ubuntu多版本cuda并存与切换【两个博客链接】
查看>>
html5新特性之DOCTYPE声明
查看>>
POJ 3299 Humidex 难度:0
查看>>
快速切题 poj3414 Pots
查看>>
Linux 常用命令
查看>>
五家共井(第1届第3题)
查看>>