HDU-2017 多校训练赛8-1002-Battlestation Operational
来源:互联网 发布:js 数组重新排序 编辑:程序博客网 时间:2024/06/05 08:55
ACM模版
描述
题解
比赛时,看出来这个题是需要用到莫比乌斯函数来解,但是无奈自己太笨,不懂得变通,没有做出来,赛后找了一下大牛们的题解,看到一个不错的。
该题解来自于 Lsxxxxxxxxxxxxx 的博客,他的推导过程和莫比乌斯函数的代入应用过程十分详细,让我对莫比乌斯函数的使用进一步了解了一些,很不错的题解,666~~~
代码
#include <iostream>#include <cstring>#include <cstdio>using namespace std;typedef long long ll;const int MAXN = 1e6 + 10;const int MOD = 1e9 + 7;int n;bool check[MAXN];int prime[MAXN];ll d[MAXN];ll miu[MAXN];ll sum[MAXN];ll cnt[MAXN];void Mobius(){ memset(check, false, sizeof(check)); d[1] = miu[1] = 1LL; int tot = 0; for (int i = 2; i < MAXN; i++) { if (!check[i]) { prime[tot++] = i; d[i] = 2; cnt[i] = 1; miu[i] = -1; } for (int j = 0; j < tot; j++) { if ((ll)i * prime[j] > MAXN) { break; } check[i * prime[j]] = true; if (i % prime[j] == 0) { d[i * prime[j]] = d[i] / (cnt[i] + 1) * (cnt[i] + 2); cnt[i * prime[j]] = cnt[i] + 1; miu[i * prime[j]] = 0; break; } else { d[i * prime[j]] = d[i] << 1; cnt[i * prime[j]] = 1; miu[i * prime[j]] = -miu[i]; } } } sum[1] = 1; for (int i = 2; i < MAXN; i++) { sum[i] = (sum[i - 1] + d[i - 1] + 1) % MOD; } for (int i = 1; i < MAXN; i++) { sum[i] = (sum[i] + sum[i - 1]) % MOD; miu[i] = (miu[i] + miu[i - 1]) % MOD; }}int main(){ Mobius(); ll ans; while (~scanf("%d", &n)) { ans = 0; for (int i = 1, last; i <= n; i = last + 1) { last = n / (n / i); ans = (ans + (miu[last] - miu[i - 1]) % MOD * sum[n / i] % MOD) % MOD; } ans = (ans + MOD) % MOD; printf("%lld\n", ans); } return 0;}
阅读全文
0 0
- HDU-2017 多校训练赛8-1002-Battlestation Operational
- HDU 6134(2017 多校训练:Battlestation Operational(莫比乌斯反演))
- HDU 6134 && 2017 多校训练:Battlestation Operational(莫比乌斯反演+积性函数)
- HDU 6134 Battlestation Operational
- HDU 6134 Battlestation Operational
- HDU-2017 多校训练赛1-1002-Balala Power!
- HDU-2017 多校训练赛6-1002-Mindis
- HDU-2017 多校训练赛10-1002-Array Challenge
- HDU-2017 多校训练赛8-1008-Hybrid Crystals
- HDU-2017 多校训练赛8-1011-Killer Names
- HDU-2017 多校训练赛8-补题
- 2017多校八 1002题 hdu 6134 Battlestation Operational 艾弗森约定 莫比乌斯函数 分块
- HDU 6134 Battlestation Operational 2017多校8 莫比乌斯反演
- hdu6134 Battlestation Operational【2017多校第八场】
- HDU 6134 Battlestation Operational (mobius +前缀和)
- hdu 6134 Battlestation Operational [反演]【数学】
- Hdu 6134 Battlestation Operational【容斥】
- hdu 6134 Battlestation Operational mobius反演
- Linux 安装MongoDB 并设置防火墙,使用远程客户端访问
- uva 122 Dropping Balls
- 《C++程序设计教程》——C++对C语言的扩充
- 贮油点问题
- 可移植的 Makefile 教程
- HDU-2017 多校训练赛8-1002-Battlestation Operational
- MyBatis实现Mysql数据库分库分表操作和总结
- Linux之Libcurl库的介绍与应用
- 一:爬虫简介
- HDU
- js实现轮播图
- kibana+kafka+elastic+logstash 日志分析系统
- ZOJ 3609 Modular Inverse(求逆元)
- 修改Dreamweaver编辑器颜色样式(代码颜色)