PE 439 【莫比乌斯反演】【杜教筛】
来源:互联网 发布:手机淘宝买家秀在哪看 编辑:程序博客网 时间:2024/04/28 13:26
垃圾题,坑了我一天QAQ
题目大意:求
=
=
=
=
这貌似跟SDOI2015的那道题差不多,但是这里有个
对于
然后是处理
这就是一个杜教筛啊QAQ
这里
就有
前
复杂度
【答案】968697378
#include<iostream>#include<algorithm>#include<ctime>#include<cmath>#include<cstring>#include<string>#include<cstdlib>#include<cstdio>#define N 21543983#define M 1000000000#define LL long longusing namespace std;LL n = (LL)1e11,tot,siz;LL s0[N],pr[N],num[N],f[N],miu[N];int prime[N];bool v[N];LL first[N],to[N],next[N],S[N];void get_prime(){ num[1] = 1; miu[1] = 1; f[1] = 1; for (int i = 2;i < N;i ++) { if (!v[i]) { prime[tot ++] = i; miu[i] = -1; num[i] = 1 + i; s0[i] = 1 + i; pr[i] = 1; } for (int j = 0;j < tot && i * prime[j] < N;j ++) { v[i * prime[j]] = true; if (i % prime[j] == 0) { pr[i * prime[j]] = pr[i]; s0[i * prime[j]] = (s0[i] * prime[j] + 1) % M; num[i * prime[j]] = pr[i] * s0[i * prime[j]] % M; break; } else { miu[i * prime[j]] = -miu[i]; pr[i * prime[j]] = num[i]; s0[i * prime[j]] = prime[j] + 1; num[i * prime[j]] = num[i] * s0[i * prime[j]] % M; } } f[i] = (f[i - 1] + i * miu[i]) % M; } for (int i = 2;i < N;i ++) (num[i] += num[i - 1]) %= M;}LL find(LL n){ LL x = n % N; for (LL i = first[x];i;i = next[i]) if (to[i] == n) return S[i]; return -1;}void inser(LL n,LL w){ if (w < 0) w += M; LL x = n % N; next[++ siz] = first[x]; first[x] = siz; to[siz] = n; S[siz] = w;}LL mul2(LL a,LL b){ (~a & 1) ? a >>= 1 : b >>= 1; return ((a % M) * (b % M)) % M;}LL cal(LL n){ if (n < N) return f[n]; LL S = find(n); if (~ S) return S; LL ret = 1; for (LL i = 2,j;i <= n;i = j + 1) { j = min(n,n / (n / i)); (ret -= mul2(j + i,j - i + 1) * cal(n / i)) %= M; } inser(n,ret); return ret;}LL sigma(LL n){ if (n < N) return num[n]; LL ret = 0; for (LL i = 1,j;i <= n;i = j + 1) { j = min(n,n / (n / i)); (ret += mul2(j + i,j - i + 1) * (n / i)) %= M; } return ret;}LL pf(LL x){ return x * x % M;}int main(){ get_prime(); LL ans = 0; for (LL i = 1,j;i <= n;i = j + 1) { j = min(n,n / (n / i)); (ans += (cal(j) - cal(i - 1)) * pf(sigma(n / i))) %= M; } if (ans < 0) ans += M; cout << ans << endl; return 0;}
0 0
- PE 439 【莫比乌斯反演】【杜教筛】
- PE 202 【莫比乌斯反演】
- 二项式反演,莫比乌斯反演。
- 莫比乌斯反演与杜教筛
- 求和 杜教筛+莫比乌斯反演
- 莫比乌斯反演
- 莫比乌斯反演
- 莫比乌斯反演
- 莫比乌斯反演
- 莫比乌斯反演
- 莫比乌斯反演
- 莫比乌斯反演
- 莫比乌斯反演
- 莫比乌斯反演
- 莫比乌斯反演
- 莫比乌斯反演
- 莫比乌斯反演
- 莫比乌斯反演
- mybatis分页插件(物理分页)
- 艰难的Qt学习之路——简易加法器
- 在dokcer中安装Phpmyadmin并与mysql容器连接
- jquery 获取标签名(tagName)
- 设置一些基础变量--initNEW2-UFT.bat
- PE 439 【莫比乌斯反演】【杜教筛】
- 阿里云ubuntu配置安装nginx,配置域名和HTTPS
- 表观反射率
- 获取keystore sha1
- 编译原理——实验 1.2 在 Windows平台下使用 Flex和 Bison
- Apache Maven 入门篇
- Getting started with caffe questions answers (摘选)
- 博客搬家了
- android中使用surfaceview进行视频播放