hdu 6053 TrickGCD
Problem
acm.hdu.edu.cn/showproblem.php?pid=6053
莫比乌斯反演介绍
莫比乌斯反演(by PoPoQQQ)
莫比乌斯反演入门
莫比乌斯反演
Reference
2017 Multi-University Training Contest 2 solutions BY 电子科技大学(1009题)
HDU 6053 TrickGCD (莫比乌斯函数)
解题报告:HDU_6053 TrickGCD 莫比乌斯反演
Meaning
给定一个序列 {An}\{A_{n}\},要构造一个序列 {Bn}\{B_{n}\},满足:
- 1≤Bi≤Ai1\leq B_{i}\leq A_{i}
- gcd(B1,…,Bn)≥2gcd(B_{1},…,B_{n})\geq 2
问构造的方案数。
Analysis
暴力的做法,就是枚举 gcd,每一个 gcd 产生的答案是 ∏ni=1Aigcd\prod^{n}_{i=1} \frac{A_{i}}{gcd},总的答案就是它们的求和,但要去重,可以用莫比乌斯反演。
…好吧其实现在并不太懂莫比乌斯反演…按官方题解,定义:
F(x):gcd 是 x 倍数的方案数
;
我猜相应的就有:
f(x):gcd 是 x 的方案数
;
于是:
F(x)=∑x|df(d)⇒f(x)=∑x|dμ(dx)F(d)F(x) = \sum_{x | d}f(d) \Rightarrow f(x) = \sum_{x | d} \mu (\frac{d}{x})F(d)
而 F(x)=∏ni=1AixF(x) = \prod^{n}_{i=1} \frac{A_{i}}{x},就可以做了。
按 dalao 的说法,因为枚举 gcd 时是从 2 开始的,f(1) 没有用到,所以在乘 μ(i)\mu (i)的时候,要多乘一个 -1,于是就有了第二个参考博客的反演式。
在处理那个连乘式的时候,要用一点优化处理。
好吧还是很迷…
Code
#include <cstdio>
#include <cstring>
#include <algorithm>
using namespace std;
const int N = 100000, A = N, MOD = 1000000007;int a[N], sum[N<<1|1];
int prime[A+1];
int mu[A+1];void Mobius()
{mu[1] = 1;memset(prime, -1, sizeof prime);for(int i = 2, top = 0; i <= A; ++i){if(prime[i]){prime[top++] = i;mu[i] = -1;}for(int j = 0; j < top && i * prime[j] <= A; ++j){prime[i * prime[j]] = 0;if(i % prime[j])mu[i * prime[j]] = -mu[i];else{mu[i * prime[j]] = 0;break;}}}
}int fast_pow(long long a, int b)
{long long x = 1;for( ; b; b >>= 1, a = a * a % MOD)if(b & 1)x = x * a % MOD;return x % MOD;
}int main()
{Mobius();int T;scanf("%d", &T);for(int kase = 1; kase <= T; ++kase){int n, small = A, big = 0;scanf("%d", &n);memset(sum, 0, sizeof sum);for(int i = 0; i < n; ++i){scanf("%d", a+i);++sum[a[i]];small = min(small, a[i]);big = max(big, a[i]);}for(int i = 1; i <= big << 1; ++i)sum[i] += sum[i-1];long long ans = 0, tmp;for(int d = 2; d <= small; ++d)if(tmp = -mu[d]) // mu[d] != 0{for(int i = d; i <= big; i += d)tmp = tmp * fast_pow(i/d, sum[i+d-1]-sum[i-1]) % MOD;ans = (ans + tmp + MOD) % MOD;}printf("Case #%d: %I64d\n", kase, ans);}return 0;
}
hdu 6053 TrickGCD相关推荐
- 2017 多校2 hdu 6053 TrickGCD
2017 多校2 hdu 6053 TrickGCD 题目: You are given an array \(A\) , and Zhu wants to know there are how ma ...
- 解题报告(十五)莫比乌斯反演与积性函数(ACM / OI)
整理的算法模板合集: ACM模板 点我看算法全家桶系列!!! 实际上是一个全新的精炼模板整合计划 好久没写反演了,写些水题慢慢捡起来 目录 A. (BZOJ 2440: 中山市选2011 )完全平方数 ...
- HDU 4389 - X mod f(x)
题目地址: http://acm.hdu.edu.cn/showproblem.php?pid=4389 2012多校,第9场,1010 . 问题是,询问区间内 存在多少个 哈沙德数(Harshad ...
- hdu 4389 囧,打表
http://acm.hdu.edu.cn/showproblem.php?pid=4389 题意 :一个数能被他各个位数之和整除则符合要求,给L,R,问区间里有多少个数符合要求. 囧,居然打表就能过 ...
- HDU——1106排序(istringstream的使用、STLvector练习)
排序 Time Limit: 2000/1000 MS (Java/Others) Memory Limit: 65536/32768 K (Java/Others) Total Submiss ...
- hdu 5438 Ponds 拓扑排序
Ponds Time Limit: 1 Sec Memory Limit: 256 MB 题目连接 http://acm.hdu.edu.cn/contests/contest_showproblem ...
- HDU 1248 寒冰王座(全然背包:入门题)
HDU 1248 寒冰王座(全然背包:入门题) http://acm.hdu.edu.cn/showproblem.php?pid=1248 题意: 不死族的巫妖王发工资拉,死亡骑士拿到一张N元的钞票 ...
- hdu 1312 Red and Black 解题报告
题目链接:http://acm.hdu.edu.cn/showproblem.php?pid=1312 第二条深搜,题目并不难,但是做了我好久好久,由于一个细节,让我赌上了一个晚上的时间. 题目大意: ...
- HDU 1429 胜利大逃亡(续) (BFS+位压缩)
题目链接:http://acm.hdu.edu.cn/showproblem.php?pid=1429 胜利大逃亡(续) Time Limit: 4000/2000 MS (Java/Others) ...
最新文章
- 4g ecgi 编码_4G学习之IMSI附着
- 在独立Java应用程序中使用Tomcat JDBC连接池
- thinkphp v5.0.24 密码爆破_轻松搭建基于 Serverless 的 ThinkPHP 应用
- CSS中选择器的优先级 ( ※关于相同属性的覆盖问题 )
- CCF201412-1 门禁系统(100分)
- 贪心算法几个经典的例子
- HART协议数据格式和消息结构的举例分析
- 学吉他该如何科学背谱?
- 理解Aode Air,理解RIA开发
- 2019厦门科技中学计算机特长,注意看!2019厦门市属学校特长生录取入围名单公布!...
- kubebuilder自定义资源
- 一般人我都不告诉他们
- c语言中余数取整,C 逻辑运算, 移位运算 , 取整 , 取模(取余)
- 百择电商:抖音什么情况下会被限流?
- Flagger on ASM——基于Mixerless Telemetry实现渐进式灰度发布系列 3 渐进式灰度发布
- 基于QT实现的多媒体播放器
- 小米手机买什么蓝牙耳机好?适配小米手机的蓝牙耳机推荐
- bcrypt加密和sha256加密
- 在ARM-linux上实现4G模块simcom7100c 的PPP拨号上网
- 水桶服务器的作用,我的世界水桶服务器怎么用_我的世界水桶服教程_快吧单机游戏...
热门文章
- 2013-2014 NBA 东西部决赛 + 总决赛合集
- 无月租的流量卡是物联卡吗,怎么才能区分是不是物联卡?
- Arduino - RGB全彩LED模块
- 推荐几款免费视频格式转换软件,比格式工厂更好用
- 2017-2042美国国防部无人系统路线图
- Effective C++条款23
- dubbo官方文档_Dubbo(一)
- mysql string agg_【转】SQL Server一个字段串拆分成多行显示或者多行数据合并成一个字符串(STRING_AGG、STRING_SPLIT)...
- django项目环境搭建
- linux—jock