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相关推荐

  1. 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 ...

  2. 解题报告(十五)莫比乌斯反演与积性函数(ACM / OI)

    整理的算法模板合集: ACM模板 点我看算法全家桶系列!!! 实际上是一个全新的精炼模板整合计划 好久没写反演了,写些水题慢慢捡起来 目录 A. (BZOJ 2440: 中山市选2011 )完全平方数 ...

  3. HDU 4389 - X mod f(x)

    题目地址: http://acm.hdu.edu.cn/showproblem.php?pid=4389 2012多校,第9场,1010 . 问题是,询问区间内 存在多少个 哈沙德数(Harshad ...

  4. hdu 4389 囧,打表

    http://acm.hdu.edu.cn/showproblem.php?pid=4389 题意 :一个数能被他各个位数之和整除则符合要求,给L,R,问区间里有多少个数符合要求. 囧,居然打表就能过 ...

  5. HDU——1106排序(istringstream的使用、STLvector练习)

    排序 Time Limit: 2000/1000 MS (Java/Others)    Memory Limit: 65536/32768 K (Java/Others) Total Submiss ...

  6. hdu 5438 Ponds 拓扑排序

    Ponds Time Limit: 1 Sec Memory Limit: 256 MB 题目连接 http://acm.hdu.edu.cn/contests/contest_showproblem ...

  7. HDU 1248 寒冰王座(全然背包:入门题)

    HDU 1248 寒冰王座(全然背包:入门题) http://acm.hdu.edu.cn/showproblem.php?pid=1248 题意: 不死族的巫妖王发工资拉,死亡骑士拿到一张N元的钞票 ...

  8. hdu 1312 Red and Black 解题报告

    题目链接:http://acm.hdu.edu.cn/showproblem.php?pid=1312 第二条深搜,题目并不难,但是做了我好久好久,由于一个细节,让我赌上了一个晚上的时间. 题目大意: ...

  9. HDU 1429 胜利大逃亡(续) (BFS+位压缩)

    题目链接:http://acm.hdu.edu.cn/showproblem.php?pid=1429 胜利大逃亡(续) Time Limit: 4000/2000 MS (Java/Others)  ...

最新文章

  1. 4g ecgi 编码_4G学习之IMSI附着
  2. 在独立Java应用程序中使用Tomcat JDBC连接池
  3. thinkphp v5.0.24 密码爆破_轻松搭建基于 Serverless 的 ThinkPHP 应用
  4. CSS中选择器的优先级 ( ※关于相同属性的覆盖问题 )
  5. CCF201412-1 门禁系统(100分)
  6. 贪心算法几个经典的例子
  7. HART协议数据格式和消息结构的举例分析
  8. 学吉他该如何科学背谱?
  9. 理解Aode Air,理解RIA开发
  10. 2019厦门科技中学计算机特长,注意看!2019厦门市属学校特长生录取入围名单公布!...
  11. kubebuilder自定义资源
  12. 一般人我都不告诉他们
  13. c语言中余数取整,C 逻辑运算, 移位运算 , 取整 , 取模(取余)
  14. 百择电商:抖音什么情况下会被限流?
  15. Flagger on ASM——基于Mixerless Telemetry实现渐进式灰度发布系列 3 渐进式灰度发布
  16. 基于QT实现的多媒体播放器
  17. 小米手机买什么蓝牙耳机好?适配小米手机的蓝牙耳机推荐
  18. bcrypt加密和sha256加密
  19. 在ARM-linux上实现4G模块simcom7100c 的PPP拨号上网
  20. 水桶服务器的作用,我的世界水桶服务器怎么用_我的世界水桶服教程_快吧单机游戏...

热门文章

  1. 2013-2014 NBA 东西部决赛 + 总决赛合集
  2. 无月租的流量卡是物联卡吗,怎么才能区分是不是物联卡?
  3. Arduino - RGB全彩LED模块
  4. 推荐几款免费视频格式转换软件,比格式工厂更好用
  5. 2017-2042美国国防部无人系统路线图
  6. Effective C++条款23
  7. dubbo官方文档_Dubbo(一)
  8. mysql string agg_【转】SQL Server一个字段串拆分成多行显示或者多行数据合并成一个字符串(STRING_AGG、STRING_SPLIT)...
  9. django项目环境搭建
  10. linux—jock