HDU6760 Math is Simple 数学变形+莫比乌斯反演
题目描述
求
∑1≤a≤b≤n,gcd(a,b)=1,a+b≥n1ab\sum\limits_{1\leq a \le b \leq n,gcd(a,b)=1,a+b \geq n}\frac{1}{ab}1≤a≤b≤n,gcd(a,b)=1,a+b≥n∑ab1
1≤T≤1e4,1≤N≤1e81 \leq T \leq 1e4 , 1\leq N \leq 1e81≤T≤1e4,1≤N≤1e8
分析
有a+b≥na+b \geq na+b≥n,所以考虑和前一项作差。
fn=∑1≤a<b≤n,gcd(a,b)=1,a+b≥n1abf_n = \sum\limits_{1\leq a < b \leq n,gcd(a,b)=1,a+b \geq n}\frac{1}{ab}fn=1≤a<b≤n,gcd(a,b)=1,a+b≥n∑ab1
作差之后,少了个a+b=n−1a+b = n-1a+b=n−1,多了个b=nb=nb=n即:
fn=fn−1+∑1≤a<n,gcd(a,n)=11an−∑1≤a<b≤n,gcd(a,b)=1,a+b=n−11abf_n = f_{n-1} + \sum\limits_{1 \leq a < n,gcd(a,n)=1} \frac{1}{an} - \sum\limits_{1\leq a < b \leq n,gcd(a,b)=1,a+b = n-1}\frac{1}{ab}fn=fn−1+1≤a<n,gcd(a,n)=1∑an1−1≤a<b≤n,gcd(a,b)=1,a+b=n−1∑ab1
发现对于后面-的部分,设为gng_ngn有:
gn=∑1≤a<b≤n,gcd(a,b)=1,a+b=n1ab=1n∑1≤a<b≤n,gcd(a,b)=1,a+b=n1a+1b=1n∑1≤a<n,gcd(a,n)=11ag_n=\sum\limits_{1\leq a < b \leq n,gcd(a,b)=1,a+b = n}\frac{1}{ab} = \frac{1}{n}\sum\limits_{1\leq a < b \leq n,gcd(a,b)=1,a+b = n} \frac{1}{a} + \frac{1}{b} = \frac{1}{n}\sum\limits_{1\leq a < n,gcd(a,n)=1} \frac{1}{a}gn=1≤a<b≤n,gcd(a,b)=1,a+b=n∑ab1=n11≤a<b≤n,gcd(a,b)=1,a+b=n∑a1+b1=n11≤a<n,gcd(a,n)=1∑a1
且上面式子的n≥3n\geq 3n≥3,当n=2n=2n=2时,g2=0g_2 = 0g2=0
发现跟前面那一项长的差不多,其实就是有:
fn=fn−1+gn−gn−1f_n= f_{n-1} + g_n-g_{n-1}fn=fn−1+gn−gn−1
将fn−1f_{n-1}fn−1再裂开,我们就有fn=f2+gn−g2=12+gnf_n = f_2 + g_n - g_2 = \frac{1}{2} + g_nfn=f2+gn−g2=21+gn
对于gng_ngn,有:
gn=1n∑i=1n1i∑d∣gcd(i,n)μ(d)=1n∑d∣nμ(d)dS(⌊nd⌋)g_n = \frac{1}{n} \sum\limits_{i=1}^{n} \frac{1}{i}\sum\limits_{d|gcd(i,n)} \mu(d) = \frac{1}{n}\sum\limits_{d|n} \frac{\mu(d)}{d}S(\lfloor \frac{n}{d} \rfloor)gn=n1i=1∑ni1d∣gcd(i,n)∑μ(d)=n1d∣n∑dμ(d)S(⌊dn⌋)
然后开一个1e81e81e8的数组,需要380MB380MB380MB的空间,所以我们可以预处理前缀和,然后对于每个nnn进行质因数分解,然后二进制枚举质因数即可。
代码
#include <bits/stdc++.h>#define rep(i,a,b) for(int i=(a);i<=(b);++i)
#define dep(i,a,b) for(int i=(a);i>=(b);--i)
#define fi first
#define se second
#define CL clear
#define MP make_pair
#define PB push_back//#define int long longconst int N = (int) 1e8 + 10;
const int mod = (int) 998244353;using namespace std;typedef long long ll;inline int rd() {int p=0; int f=1; char ch=getchar();while(ch<'0' || ch>'9'){if(ch=='-') f*=-1; ch=getchar();}while(ch>='0' && ch<='9'){p=p*10+ch-'0'; ch=getchar();}return p*f;
}int inv[N];ll qpow(ll x,ll k,ll mo) {ll s = 1;while(k) {if(k&1) s=1ll*s*x%mo;x=1ll*x*x%mo; k>>=1;}return s;
}vector<ll> fac;signed main() {inv[0] = inv[1] = 1;for(int i=2;i<=(int)(1e8);++i) inv[i] = (ll)(mod - mod / i) * inv[mod % i] % mod;for(int i=2;i<=(int)(1e8);++i) inv[i] = (inv[i-1] + inv[i]) % mod;int t = rd();while(t--) {ll n = rd(); ll ans = qpow(2,mod-2,mod); ll x = n;fac.CL(); for(ll i=2;i*i<=x;++i) if(x%i == 0) {fac.PB(i);while(x%i==0) x/=i;}if(x!=1) fac.PB(x);ll gn = 0;if(n>2) {for(ll i=0;i<(1<<fac.size());++i) {ll d = 1; ll s = 0;for(ll j=0;j<fac.size();++j) if(i&(1<<j)){d *= fac[j]; s++;}gn = (gn + 1ll * ((s&1) ? (-1) : 1) * qpow(d,mod-2,mod) % mod * inv[n/d] % mod) % mod;}gn = gn * qpow(n , mod-2 , mod) % mod;}else gn = 0;printf("%lld\n",(ans + gn + mod) % mod);}return 0;
}
HDU6760 Math is Simple 数学变形+莫比乌斯反演相关推荐
- 数学:莫比乌斯反演-约数个数和
BZOJ3994:利用莫比乌斯反演求约数个数和 解答此题需要利用约束个数函数的形式,将其与gcd联系再一起,然后再反演,推导 很麻烦 1 #include<cstdio> 2 #inclu ...
- 数学--数论--莫比乌斯反演
一.莫比乌斯反演涉及知识 1.莫比乌斯函数 2.莫比乌斯的线性筛法 3.狄利克雷卷积 4.莫比乌斯反演详解 5.整除法分块 6.杜教筛 二.μ 莫比乌斯函数定义 μ(n)={1n=1(−1)kn= P ...
- 模板 - 数学 - 数论 - 莫比乌斯反演 - 2
新东西: 求$\sum\limits_{i=1}^{n}|\mu(i)|$ 根据莫比乌斯函数的性质,实际上就是求$\sum\limits_{i=1}^{\lfloor\sqrt{n}\rfloor}\ ...
- 数学(莫比乌斯反演):HAOI 2011 问题B
题目描述: 对于给出的n个询问,每次求有多少个数对(x,y),满足a≤x≤b,c≤y≤d,且gcd(x,y) = k,gcd(x,y)函数为x和y的最大公约数. 输入格式: 第一行一个整数n,接下来n ...
- 莫比乌斯反演/容斥 +2020ICPC 江西省大学生程序设计竞赛 A Simple Math Problem
题目描述 输入描述: 输出描述: 示例1 输入 3 输出 5 分析: 1.这个题其实考的是一个莫比乌斯反演题,但是由于我知识储备不够,没有看出来,题目给的范围可以瞎搞一下,所以下面容斥可以过. 2.转 ...
- 《算法竞赛进阶指南》数论篇(3)-组合计数,Lucas定理,Catalan数列,容斥原理,莫比乌斯反演,概率与数学期望,博弈论之SG函数
文章目录 组合计数 例题:Counting swaps Lucas定理 Cnm≡Cnmodpmmodp∗Cn/pm/p(modp)C_n^m\equiv C_{n\ mod\ p}^{m\ mod\ ...
- 【数学专题】莫比乌斯反演与积性函数
整理的算法模板合集: ACM模板 点我看算法全家桶系列!!! 实际上是一个全新的模板整合计划 目录 莫比乌斯反演 AcWing 2702. problem b AcWing 1358. 约数个数和(莫 ...
- 数学--数论--HDU 4675 GCD of Sequence(莫比乌斯反演+卢卡斯定理求组合数+乘法逆元+快速幂取模)
先放知识点: 莫比乌斯反演 卢卡斯定理求组合数 乘法逆元 快速幂取模 GCD of Sequence Alice is playing a game with Bob. Alice shows N i ...
- BZOJ3309 DZY Loves Math(莫比乌斯反演+线性筛)
一通正常的莫比乌斯反演后,我们只需要求出g(n)=Σf(d)*μ(n/d)的前缀和就好了. 考虑怎么求g(n).当然是打表啊.设n=∏piai,n/d=∏pibi .显然若存在bi>1则这个d没 ...
最新文章
- 【代码保留】表删除/重命名(含中文与空格)
- Spring学习11之AOP
- 为了OFFER,花了几个小时,刷下Leetcode链表算法题
- Linux 添加DNS配置
- lua工具库penlight--08额外的库(二)
- php无限极菜单,无限极菜单的实现
- 小试牛刀:文本处理工具之grep、egrep详解
- 针对需要使用T3协议的Weblogic2628漏洞解决方案
- 文件中有一组整数,要求排序后输出到另一个文件中
- C# NPOI(xlsx相关操作)
- 拖拽 开发 easyui php,Easyui-Builder
- 如何让网站自动识别手机端与PC端
- 电脑的计算机文件打开格式,如何打开zip文件_怎样在电脑上打开zip文件
- 生鲜配送app开发方案
- 高德地图定位、添加定位图标、连线(二)
- Spirngboot整合之Mybatis-plus yml配置
- 2022-05-25 postgres中的并发控制的可重复读
- 二维计算机动画,二维计算机动画制作新技术.pdf
- 陆金所-稳盈-安e+ 新标-QQ自动通知
- [洛谷]P1936 水晶灯火灵 (#递推 -1.3)