#6682. 梦中的数论(Min25筛)

#6682. 梦中的数论

推式子

∑i=1n∑j=kn∑k=1n[(j∣i)∧((j+k)∣i)]显然有j+k>j,所以我们另j+k=k′,有j>k′,并且j,k′都是i的约数这就相当于在σ(i)中选取一对有序对了,所以总的选法有C(σ(i),2)种原式=∑i=1nσ(i)(σ(i)−1)2∑i=1nσ2(i)−∑i=1nσ(i)2∑i=1nσ(i)=∑i=1n∑j∣i=∑i=1nni,数论分块即可求解∑i=1nσ2(i):i∈prime,σ2(p)=4,σ2(pe)=(e+1)2并且这是一个积函数,所以我们显然可以用Min25筛求解\sum_{i = 1} ^{n} \sum_{j = k} ^{n} \sum_{k = 1} ^{n}[(j \mid i) \wedge ((j + k) \mid i)]\\ 显然有j + k > j,所以我们另j + k = k',有j > k',并且j, k'都是i的约数\\ 这就相当于在\sigma(i)中选取一对有序对了,所以总的选法有C(\sigma(i), 2)种\\ 原式 = \sum_{i = 1} ^{n} \frac{\sigma(i)(\sigma(i) - 1)}{2}\\ \frac{\sum_{i = 1} ^{n} \sigma ^2(i) - \sum_{i = 1} ^{n} \sigma(i)}{2}\\ \sum_{i = 1} ^{n} \sigma(i) = \sum_{i = 1} ^{n} \sum_{j \mid i} = \sum_{i = 1} ^{n} \frac{n}{i},数论分块即可求解\\ \sum_{i = 1} ^{n} \sigma ^2(i):\\ i \in prime, \sigma ^ 2(p) = 4, \sigma ^ 2(p ^ e) = (e + 1) ^2\\ 并且这是一个积函数,所以我们显然可以用Min25筛求解\\ i=1nj=knk=1n[(ji)((j+k)i)]j+k>j,j+k=kj>kj,kiσ(i)C(σ(i),2)=i=1n2σ(i)(σ(i)1)2i=1nσ2(i)i=1nσ(i)i=1nσ(i)=i=1nji=i=1nin,i=1nσ2(i):iprime,σ2(p)=4,σ2(pe)=(e+1)2Min25

代码

/*Author : lifehappy
*/
#pragma GCC optimize(2)
#pragma GCC optimize(3)
#include <bits/stdc++.h>#define mp make_pair
#define pb push_back
#define endl '\n'
#define mid (l + r >> 1)
#define lson rt << 1, l, mid
#define rson rt << 1 | 1, mid + 1, r
#define ls rt << 1
#define rs rt << 1 | 1using namespace std;typedef long long ll;
typedef unsigned long long ull;
typedef pair<int, int> pii;const double pi = acos(-1.0);
const double eps = 1e-7;
const int inf = 0x3f3f3f3f;inline ll read() {ll f = 1, x = 0;char c = getchar();while(c < '0' || c > '9') {if(c == '-')    f = -1;c = getchar();}while(c >= '0' && c <= '9') {x = (x << 1) + (x << 3) + (c ^ 48);c = getchar();}return f * x;
}const int N = 1e6 + 10, mod = 998244353, inv2 = mod + 1 >> 1;namespace Min_25 {int prime[N], id1[N], id2[N], m, cnt, T;ll a[N], g[N], sum[N], n;bool st[N];int ID(ll x) {return x <= T ? id1[x] : id2[n / x];}void init() {T = sqrt(n + 0.5);cnt = 0, m = 0;for(int i = 2; i <= T; i++) {if(!st[i]) {prime[++cnt] = i;sum[cnt] = (sum[cnt - 1] + 4) % mod;}for(int j = 1; j <= cnt && 1ll * i * prime[j] <= T; j++) {st[i * prime[j]] = 1;if(i % prime[j] == 0) {break;}}}for(ll l = 1, r; l <= n; l = r + 1) {r = n / (n / l);a[++m] = n / l;if(a[m] <= T) id1[a[m]] = m;else id2[n / a[m]] = m;g[m] = (4ll * a[m] - 4) % mod;}for(int j = 1; j <= cnt; j++) {for(int i = 1; i <= m && 1ll * prime[j] * prime[j] <= a[i]; i++) {g[i] = ((g[i] - (g[ID(a[i] / prime[j])] - sum[j - 1]) % mod) % mod + mod) % mod;}}for(int i = 1; i <= T; i++) {st[i] = 0;}}ll solve(ll n, int m) {if(n < prime[m]) return 0;ll ans = (g[ID(n)] - sum[m - 1] % mod + mod) % mod;for(int j = m; j <= cnt && 1ll * prime[j] * prime[j] <= n; j++) {for(ll i = prime[j], e = 1; i * prime[j] <= n; i *= prime[j], e++) {ans = (ans + (e + 1) * (e + 1) % mod * (solve(n / i, j + 1)) % mod + (e + 2) * (e + 2) % mod) % mod;}}return ans;}ll solve(ll x) {if(x <= 1) return x;n = x;init();return solve(x, 1) + 1;}
}int main() {// freopen("in.txt", "r", stdin);// freopen("out.txt", "w", stdout);// ios::sync_with_stdio(false), cin.tie(0), cout.tie(0);ll n = read(), ans = 0;for(ll l = 1, r; l <= n; l = r + 1) {r = n / (n / l);ans = (ans + (r - l + 1) % mod * ((n / l) % mod) % mod) % mod;}ans = (Min_25::solve(n) - ans) % mod * inv2 % mod;ans = (ans % mod + mod) % mod;cout << ans << endl;return 0;
}

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.mzph.cn/news/314160.shtml

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈email:809451989@qq.com,一经查实,立即删除!

相关文章

A. [2021.1.29多校省选模拟11]最大公约数(杜教筛/数论)

A. [2021.1.29多校省选模拟11]最大公约数 这是一个杜教筛的经典题目&#xff0c;最后我们只需要筛一下1∗xμ(x)1*x\mu(x)1∗xμ(x)这个函数的前缀和即可&#xff0c;然后看到有111这个函数&#xff0c;我们下意识应该想到的就是μ\muμ&#xff0c;然后又有xμ(x)x\mu(x)xμ(x…

.NET Core 小程序开发零基础系列(2)——小程序服务通知(模板消息)

基于上一篇文件“.NET Core 小程序开发零基础系列&#xff08;1&#xff09;——开发者启用并校验牵手成功”的反映&#xff0c;个人觉得效果很不错&#xff0c;大家对公众号开发还是有很大需求的&#xff0c;同时也收到了很多同学的问题&#xff0c;后面我也会通过实战性文章慢…

[PowerShell]人人都值得学一点PowerShell实现自动化(2)有哪些可用的场景及方式?

部分读者反应太多知识要学了&#xff0c;学完一轮又一轮&#xff0c;笔者也不想单单为了制造学习而学习&#xff0c;所有Excel催化剂所发布的内容&#xff0c;都是笔者所亲自使用到的&#xff0c;当然很多领域也没有深挖到很底的程度。PowerShell使用场景虽然说PowerShell也是在…

[2021.1.13多校省选模拟2]T1(动态规划/轮廓线dp)

[2021.1.13多校省选模拟2]T1 一个经典的轮廓线dp&#xff0c;可以发现一定可以找到一条轮廓将这个图形分开&#xff0c;然后使得左半部分由左边处理&#xff0c;右半部分由右边处理&#xff0c;然后我们只需要处理这个折线即可&#xff0c;具体实现需要处理前缀和的前缀最大值&…

[PowerShell]人人都值得学一点PowerShell实现自动化(1)在VisualStudio上使用PowerShell...

最近学PowerShell的知识比较多&#xff0c;也开始有一点点可以分享的知识给大家输出&#xff0c;学一门语言&#xff0c;理当首先找准一个好用的IDE来帮助我们提高学习效率&#xff0c;本文给大家介绍如何在宇宙第一的IDE-Visual Studio上写PowerShell脚本。关于PowerShell的基…

[2021.1.17多校省选模拟4]T1(莫比乌斯反演/组合数学/枚举倍数)

[2021.1.17多校省选模拟4]T1 一般人都会想着去枚举直线的斜率&#xff0c;但是枚举斜率之后就会产生多条直线&#xff0c;并且这些直线的长度不一&#xff0c;难以快速求解&#xff0c;所以我们考虑换一种方法枚举。 枚举最远点对的横纵坐标之差&#xff0c;这样很容易计算这…

程序员35岁不转型就退休,是真的吗?

周六下午&#xff0c;DevOps群里&#xff0c;有人贴出来这么一张图&#xff1a;据说&#xff0c;这张图来自于谷歌&#xff0c;Google程序员之间存在这一条鄙视链&#xff0c;站在顶端的是C工程师&#xff0c;其次是Java工程师&#xff0c;再次是Python工程师&#xff0c;接下来…

.net测试篇之Moq框架简单使用

Moq简介Moq是.net平台下的一个非常流行的模拟库,只要有一个接口它就可以动态生成一个对象,底层使用的是Castle的动态代理功能.它的流行赖于依赖注入模式的兴起,现在越来越多的分层架构使用依赖注入的方式来解耦层与层之间的关系.最为常见的是数据层和业务逻辑层之间的依赖注入,…

A. 树与路径(树论/多项式/分治FFT)

A. 树与路径 首先考虑一个dp的方法&#xff0c;对于这种链划分的题目&#xff0c;有一个很重要的思想就是按照每个点的角度考虑&#xff0c;实际上链划分就是匹配问题&#xff0c;每个点只能出一条边和入一条边&#xff0c;所以我们拆点之后就是匹配&#xff0c;这也是网络流最…

.NET Core on K8S学习实践系列文章索引(持续更新)

近期在学习Kubernetes&#xff0c;基于之前做笔记的习惯&#xff0c;已经写了一部分文章&#xff0c;因此给自己立一个2019年的flag&#xff1a;完成这个《.NET Core on K8S学习实践》系列文章&#xff01;这个系列会持续更新&#xff0c;先发个草稿列表&#xff0c;后续更新&a…

TomatoLog-1.1.0实现ILoggerFactory

TomatoLogTomatoLog 是一个基于 .NETCore 平台的产品。The TomatoLog 是一个中间件&#xff0c;包含客户端、服务端&#xff0c;非常容易使用和部署。客户端实现了ILoggerFactory&#xff0c;使用服务注入成功后即可使用&#xff0c;对业务入侵非常小&#xff0c;也支持通过客户…

Docker(二)-在Docker中部署Nginx实现负载均衡(视频)

一、前言在前面的文章中我们已经介绍了如何在Centos7系统中安装Docker以及利用Docker进行Asp.Net Core应用的部署。在本文中&#xff0c;我们将继续介绍利用Docker部署Nginx服务实现负载均衡&#xff0c;我们通过视频方式向大家进行演示。注&#xff1a;查看公众号历史文章&…

P4389 付公主的背包(生成函数/多项式)

P4389 付公主的背包 https://www.luogu.com.cn/problem/solution/P4389 经典生成函数问题 求解无限背包问题&#xff0c;我们可以将每个物品看作一个多项式&#xff0c;那么最后的结果就是这些多项式的卷积的系数&#xff0c;然后我们实际上就可以考虑分治NTT了&#xff0c;但…

Docker系列之镜像瘦身(五)

本节我们来讲讲在我们在构建镜像过程中不出问题&#xff0c;同时使得最后所构建的镜像文件大小尽可能最小。缓存(cache)Docker的优势之一在于提供了缓存&#xff0c;加速镜像迭代构建&#xff0c;我们知道构建镜像使用docker build命令&#xff0c;也就是说通过docker build的缓…

一张图了解.Net Core和.NetFx和.Net Standard和Xamarin关系

一张图了解.Net Core和.Net Framework和.Net Standard和Xamarin关系总结.NET Standard是一项API规范&#xff0c;每一个特定的版本&#xff0c;都定义了必须实现的基类库。.NET Core是一个托管框架&#xff0c;针对构建控制台、云、ASP.NET Core和UWP应用程序进行了优化。每一种…

Java修炼之路——基础篇——String

String 1&#xff1a;字符串的不可变性 什么是不可变对象&#xff1f;不可变对象是指创建后无法变更的对象 String为什么是不可变的&#xff1f;String类为final&#xff0c;并且内部字符数组也为final。所以String对象是不可变对象。 String类为什么要设计为不可变&#xff1…

VS, VS Code, VS Online, VS xxx, 你都分清了吗?

首先说说部分童鞋容易混淆的 Visual Studio 和 Visual Studio Code 吧。其实&#xff0c;它们俩的关系&#xff0c;就相当于 Java 和 JavaScript&#xff0c;没啥关系。再说说 Visual Studio Online。这就复杂了。历史上&#xff0c;出现过两个 Visual Studio Online&#xff0…

Java修炼之路——基础篇——Java关键字

1&#xff1a;transient 当对象被序列化时&#xff0c;transient阻止其修饰的对象进行序列化&#xff1b;当反序列化时&#xff0c;此对象的值不会被恢复。 2&#xff1a;instanceof 判断引用指向的对象&#xff0c;是不是某个类及其子类的实例对象&#xff1b; class Person …

.NetCore从零开始使用Skywalking分布式追踪系统

将本文从0开始搭建两个webapi项目&#xff0c;使用Skywalking来追踪他们之间的调用关系及响应时间。开发环境为VisualStudio20191&#xff1a;安装Skywalking,可参考&#xff1a;https://www.cnblogs.com/sunyuliang/p/11422576.html&#xff0c;本列中搭建好后的Skywalking服务…

通过Service访问应用 (1)

目录通过Service访问应用 通过Pod IP访问应用 通过ClusterIP Service在集群内部访问 通过Service访问应用通过之前的操作&#xff0c;应用部署完成了&#xff0c;我们的Demo网站已经成功启动了&#xff0c;那么如何访问网站呢&#xff1f;通过Pod IP访问应用我们可以通过Pod IP…