HDU 5942 Just a Math Problem 容斥 莫比乌斯反演
题意:\( g(k) = 2^{f(k)} \) ,求\( \sum_{i = 1}^{n} g(i) \),其中\( f(k)\)代表k的素因子个数。
思路:题目意思很简单,但是着重于推导和简化,这是数论题的一贯思路,其中g(k)的方程可以看出是求k的无平方因子的个数,那么题目就是求1~n的无平方因字数的和了。
首先我们可以从莫比乌斯函数入手。
从\( \mu(d) \)的性质有,当d为素数单次连积时\( \mu(d)=(-1)^k\),其余d不为1时\( \mu(d)=0\)
那么可知\( \mu^{2}(d) \)在d满足条件时一定为正值1,故g(k)可化为\( \sum_{d | i} \mu^{2}(d) \) 且$$ans = \sum_{i = 1}^{n}{\sum_{d | i} \mu^{2}(d)} $$
接下来从容斥方向考虑。其实我们直接枚举素因子连乘的k,那么由\(\mu(d)\)函数的性质,可知当存在\(k^2 | d\)时,\(\mu(k)\)是不为0的,这样就去掉了素因子次数大于等于2的d,那么式子又可化成$$ {\mu^{2}(d)}= { \sum_{k^2|d}{\mu(k)} }$$
进一步$${\sum_{k=1}^{n}\sum_{k^2 | d} {\mu(k)}\lfloor\frac{n}{d}\rfloor }$$
\(\lfloor\frac{n}{d}\rfloor\)是1~n中被d整除的个数。
其中d为k^2的整倍数。
交换求和符号,将式子化成
$$\sum_{k = 1}^{n}{\mu(k)}\sum_{i=1}^{\lfloor \frac{n}{k^2}\rfloor} \lfloor \frac{n}{k^{2} i} \rfloor$$
接着枚举倍数求和就可以了,其中后个求和函数在1e6范围内可以预处理。
/** @Date : 2016-12-04-22.09
* @Author : Lweleth (SoungEarlf@gmail.com)
* @Link : https://github.com/
* @Version :
*/ #include<bits/stdc++.h>
#define LL long long
#define PII pair
#define MP(x, y) make_pair((x),(y))
#define fi first
#define se second
#define PB(x) push_back((x))
#define MMG(x) memset((x), -1,sizeof(x))
#define MMF(x) memset((x),0,sizeof(x))
#define MMI(x) memset((x), INF, sizeof(x))
using namespace std; const int INF = 0x3f3f3f3f;
const int N = 1e6+20;
const LL mod = 1e9 + 7;
const double eps = 1e-8; int sum1[N];
int pri[N];
int mu[N];
bool vis[N];
int c = 0; void mobius()
{
MMF(vis);
mu[1] = 1; for(int i = 2; i < N; i++)
{
if(!vis[i])
pri[c++] = i, mu[i] = -1;
for(int j = 0; j < c && i * pri[j] < N; j++)
{
vis[i * pri[j]] = 1;
if(i % pri[j])
mu[i * pri[j]] = -mu[i];
else
{
mu[i * pri[j]] = 0;
break;
}
}
}
} int sum(LL n)//
{
if(n < N && sum1[n])//小于N下且已经处理了直接返回预处理的值
return sum1[n];
LL t = 0;
for(LL i = 1, j = 0; i <= n; i = j + 1)
{
j = n / (n / i);
t += n / i * (j - i + 1);//优化,大于n一半的直接加
}
t %= mod;
if(n >= N)
return t;
else
return sum1[n] = t; } int main()
{
int T;
mobius();
while(~scanf("%d", &T))
{
int cnt = 0;
while(T--)
{
LL n;
LL ans = 0;
scanf("%lld", &n);
for(LL i = 1; i <= n / i; i++)//枚举sqrt(n)的因子
if(mu[i])
ans = (ans + sum(n/i/i) * mu[i]) % mod;//注意i取整 printf("Case #%d: %lld\n", ++cnt, (ans + mod) % mod);
}
} return 0;
}
HDU 5942 Just a Math Problem 容斥 莫比乌斯反演的更多相关文章
- 【二分+容斥+莫比乌斯反演】BZOJ2440 完全平方数
Description 求第k个没有完全平方因子的数,k<=1e9. Solution 这其实就是要求第k个µ[i](莫比乌斯函数)不为0的数. 然而k太大数组开不下来是吧,于是这么处理. 二分 ...
- cf900D. Unusual Sequences(容斥 莫比乌斯反演)
题意 题目链接 Sol 首先若y % x不为0则答案为0 否则,问题可以转化为,有多少个数列满足和为y/x,且整个序列的gcd=1 考虑容斥,设\(g[i]\)表示满足和为\(i\)的序列的方案数,显 ...
- 51nod 1355 - 斐波那契的最小公倍数(Min-Max 容斥+莫比乌斯反演)
vjudge 题面传送门 首先我们知道斐波那契数列的 lcm 是不太容易计算的,但是它们的 gcd 非常容易计算--\(\gcd(f_x,f_y)=f_{\gcd(x,y)}\),该性质已在我的这篇博 ...
- bzoj 2005 & 洛谷 P1447 [ Noi 2010 ] 能量采集 —— 容斥 / 莫比乌斯反演
题目:bzoj 2005 https://www.lydsy.com/JudgeOnline/problem.php?id=2005 洛谷 P1447 https://www.luogu.org/ ...
- HDU - 5942 :Just a Math Problem (莫比乌斯)
题意:略. 思路:问题转化为1到N,他们的满足mu[d]!=0的因子d个数. 即1到N的因子的莫比乌斯系数平方和. (经验:累加符号是累加的个数,我们把常数提到前面,然后用杜教筛累加个数即可. ht ...
- Codeforces.547C.Mike and Foam(容斥/莫比乌斯反演)
题目链接 \(Description\) 给定n个数(\(1\leq a_i\leq 5*10^5\)),每次从这n个数中选一个,如果当前集合中没有就加入集合,有就从集合中删去.每次操作后输出集合中互 ...
- BZOJ4833: [Lydsy1704月赛]最小公倍佩尔数(min-max容斥&莫比乌斯反演)(线性多项式多个数求LCM)
4833: [Lydsy1704月赛]最小公倍佩尔数 Time Limit: 8 Sec Memory Limit: 128 MBSubmit: 240 Solved: 118[Submit][S ...
- HDU 2841 容斥 或 反演
$n,m <= 1e5$ ,$i<=n$,$j<=m$,求$(i⊥j)$对数 /** @Date : 2017-09-26 23:01:05 * @FileName: HDU 284 ...
- 【题解】[HAOI2018]染色(NTT+容斥/二项式反演)
[题解][HAOI2018]染色(NTT+容斥/二项式反演) 可以直接写出式子: \[ f(x)={m \choose x}n!{(\dfrac 1 {(Sx)!})}^x(m-x)^{n-Sx}\d ...
随机推荐
- Appium基础环境搭建(windows)---基于python
1 JDK安装 http://www.oracle.com/technetwork/java/javase/downloads/jdk8-downloads-2133151.html 安装注意:安装 ...
- 《javascript模式--by Stoyan Stefanov》书摘--汇总
<javascript模式--by Stoyan Stefanov>书摘--基本技巧 http://www.cnblogs.com/liubei/p/JavascriptModeLog1. ...
- Centos7 下nginx nginx-1.13.4 安装
环境:CentOS Linux release 7.3.1611 (Core) Linux localhost.localdomain 3.10.0-514.26.2.el7.x86_64 #1 S ...
- Thunder团队第六周 - Scrum会议3
Scrum会议3 小组名称:Thunder 项目名称:i阅app Scrum Master:李传康 工作照片: 参会成员: 王航:http://www.cnblogs.com/wangh013/ 李传 ...
- Thunder团队Beta周贡献分规则
小组名称:Thunder 项目名称:i阅app 组长:王航 成员:李传康.翟宇豪.邹双黛.苗威.宋雨.胡佑蓉.杨梓瑞 分配规则 规则1:基础分,拿出总分的20%(8分)进行均分,剩下的80%(32分) ...
- Java 动态绑定和多态
动态绑定和多态 动态绑定是指:"在执行程序期间(而非编译期间),判断引用所指对象的实际类型,调用其相应的方法." 动态绑定(多态)存在的条件 要有继承. 要有重写. 父类引用指向子 ...
- JavaScript控制href属性进行钓鱼
前一阵子,发现JavaScript中允许临时改变<a>标签的href属性,当改变其属性后你点击它可能看不出有多严重,但是,它可以通过欺骗手段来诱骗用户透露他们的详细资料. // Uncom ...
- eclipse 创建并运行maven web项目
这两天想在eclipse上运行maven web项目,折腾了许久,总算success啦. 1,利用eclipse创建dynamic web project(eclipse需要安装m2eclipse). ...
- 【刷题】BZOJ 3175 [Tjoi2013]攻击装置
Description 给定一个01矩阵,其中你可以在0的位置放置攻击装置.每一个攻击装置(x,y)都可以按照"日"字攻击其周围的 8个位置(x-1,y-2),(x-2,y-1), ...
- [洛谷P5174]圆点
题目大意:给你$R(R\leqslant10^{14})$,求:$$\sum\limits_{x\in\mathbb{Z}}\sum\limits_{y\in\mathbb{Z}}[x^2+y^2\l ...