51Nod-1220-约数之和
来源:互联网 发布:淘宝买家怎样修改差评 编辑:程序博客网 时间:2024/05/18 01:44
ACM模版
描述
题解
这个题好难,不会写,给大家提供两个好的博客,一个是我 佐学姐 的博客,讲的是杜教筛的一些总结,《特殊函数的前缀和》,这个写的的确详细,我很喜欢这篇博客,还有一个就是
代码
#include <map>#include <cmath>#include <cstdio>using namespace std;typedef long long ll;const int MAXN = 1e6 + 10;const int MOD = 1e9 + 7;const int INV_2 = 5e8 + 4;int n, sqn, tot, ans;int prime[MAXN];int f[MAXN];bool vis[MAXN];map<ll, int> _hash;inline void inc(int &x, int y){ x += y; if (x >= MOD) { x -= MOD; }}inline void dec(int &x, int y){ x -= y; if (x < 0) { x += MOD; }}inline int num1(int x){ return x * (x + 1LL) % MOD * INV_2 % MOD;}inline int num1(int L, int R){ int ret = num1(R); dec(ret, num1(L - 1)); return ret;}int calc_imu(int x){ if (x <= sqn) { return f[x]; } if (_hash.count(x)) { return _hash[x]; } int ret = 1; for (int i = 2, j; i <= x; i = j + 1) { j = x / (x / i); dec(ret, (ll)num1(i, j) * calc_imu(x / i) % MOD); } return _hash[x] = ret;}inline int calc_imu(int L, int R){ int ret = calc_imu(R); dec(ret, calc_imu(L - 1)); return ret;}int calc_g(int n){ int ret = 0; for (int i = 1, j; i <= n; i = j + 1) { j = n / (n / i); inc(ret, (j - i + 1LL) * num1(n / i) % MOD); } return ret;}int calc_h(int n){ int ret = 0; for (int i = 1, j; i <= n; i = j + 1) { j = n / (n / i); inc(ret, (ll)(n / i) * num1(i, j) % MOD); } return ret;}int main(){ scanf("%d", &n); f[1] = 1; sqn = (int)ceil(pow(n, 2.0 / 3)); for (int i = 2; i <= sqn; ++i) { if (!vis[i]) { prime[tot++] = i; dec(f[i], 1); } for (int j = 0, k = sqn / i, o; j < tot && prime[j] <= k; ++j) { vis[o = i * prime[j]] = 1; if (i % prime[j] == 0) { f[o] = 0; break; } else { dec(f[o], f[i]); } } f[i] = (f[i - 1] + (ll)i * f[i]) % MOD; } for (int i = 1, j; i <= n; i = j + 1) { j = n / (n / i); inc(ans, (ll)calc_imu(i, j) * calc_g(n / i) % MOD * calc_g(n / i) % MOD); } printf("%d\n", ans); return 0;}
阅读全文
0 0
- 51Nod-1220-约数之和
- 51nod 1220 约数之和
- 51nod 1220 约数之和
- [杜教筛 约数和前缀和] 51Nod 1220 约数之和
- PE 439 Sum of sum of divisors | 51nod 1220 约数之和
- [数论][莫比乌斯反演][杜教筛] 51Nod 1220 约数之和
- 51nod1220 约数之和
- 51nod1220约数之和
- 【51nod1220】约数之和
- [杜教筛] 51nod1220. 约数之和
- 约数之和
- 约数之和
- 约数之和
- 51nod 1586 约数和
- 51nod 1586 约数和
- 51Nod 1586 约数和
- 51Nod-1586-约数和
- 51nod 1586 约数和
- 刚测试了一下finsh命令:list_thread(),怎么输出的是Null node,没有显示出手册里面提到的系统线程当前状态
- Gson解析List和Map类型的Json串
- C++模板类(Template)
- react navigation返回到任意页面(不集成redux)
- makefile:2: *** 遗漏分隔符 。
- 51Nod-1220-约数之和
- CentOS6.7-安装linux系统(在线/本地安装)步骤详解:
- 计算时间差 用timespan类
- HTML 元素居中的方式
- java内存模型相关概念
- 兼容PHP和Java的des加密解密代码分享
- 单元测试--MOCK静态方法
- Eclipse neon for java ee开发android点击layout下文件闪退问题
- 页面中加入一个人体时钟和仓鼠动画