\(Description\)

给定 \(n\) 个正整数序列 ,每个序列长度为 \(m\)。

选择至少 \(1\) 个序列,在每个被选择的序列中选择一个元素,求出所有被选择的元素的 \(\gcd\)。

求所有方案的结果之和,答案对 \(1e9+7\) 取模。两种方案不同,当且仅当存在至少一个元素,在一种方案中被选择,在另一种中没有。

\(Input\)

第一行,两个正整数 \(n,m\)。

接下来 \(n\) 行,每行 \(m\) 个正整数,第 \(i\) 行代表序列 。

\(Output\)

第一行,一个整数,代表答案对 \(1e9+7\) 取模的结果。

解析

一道比较难的莫比乌斯反演题,要用到其中的性质,且按套路行事技巧处很多

最后推出的是一个关于欧拉函数的式子,莫比乌斯不见了

好,现在进行套路推导

先设 \(f(x)\) 表示选择至少一个序列,在每个被选择的序列选择一个元素,它们的 \(\gcd = x\) 的方案数。

则易得

\[f(x)=\prod_{i=1}^n(\sum_{j=1}^m [a_{i,j}=x]+1)-1
\]

然后套路 \(F(x)\) 表示同 \(f(x)\) 但涵盖了 \(x\) 的倍数,即

\[F(x)=\sum_{x|d}f(d)=\sum_{x|d}(\prod_{i=1}^n(\sum_{j=1}^m [a_{i,j}=d]+1)-1)
\]

然后我们发现,我们先枚举 \(x\) ,再枚举其倍数 \(d\),而后面 \([a_{i,j}=d]\) 肯定是 \(x\) 的倍数,所以我们可以简化式子

\[\sum_{x|d}(\prod_{i=1}^n(\sum_{j=1}^m [a_{i,j}=d]+1)-1) = \prod_{i=1}(\sum_{j=1}^m [x|a_{i,j}]+1)-1
\]

而此时,为了日后式子的简便即实现,我们设

\(cnt_{i,x}=\sum_{j=1}^m[x|a_{i,j}]\) 表示第 \(i\) 个数列所有是 \(x\) 的倍数的数的个数

再为了枚举得到所有答案,我们设 \(lim\) 表示所有元素的最大值

然后一波推式子,反演

\[\begin{aligned}
\sum_{i=1}^{lim}if(i)
&=\sum_{i=1}^{lim}i\sum_{i|d}F(d)\mu(\frac{d}{i}) \\
&=\sum_{i=1}^{lim}i\sum_{i|d}\prod_{j=1}^n((cnt_{j,d}+1)-1)\mu(\frac{d}{i}) \\
&=\sum_{d=1}^{lim}\sum_{i|d}i\mu(\frac{d}{i})(\prod_{j=1}^n(cnt_{j,d}+1)-1)
\end{aligned}
\]

然后,然后~~~好像没戏了

但,我们有伟大的欧拉!!

上

\[\begin{aligned}
\varphi(n)
&=\sum_{i=1}^n[\gcd(i,n)=1] \\
&=\sum_{i=1}^n\sum_{d|gcd(i,j)}\mu(d) \\
&=\sum_{d|n}\mu(d)\frac{n}{d}
\end{aligned}
\]

哈哈哈,太棒了!

相同的一部分,代入式子

\[\begin{aligned}
\sum_{d=1}^{lim}\sum_{i|d}i\mu(\frac{d}{i})(\prod_{j=1}^n(cnt_{j,d}+1)-1)
&=\sum_{d=1}^{lim}\varphi(n)(\prod_{j=1}^n(cnt_{j,d}+1)-1)
\end{aligned}
\]

于是这题就这样了。

线性筛 \(\varphi\),预处理 \(cnt\) 数组(根据套路,不要枚举因子而是枚举倍数)。

\(Code\)

#include<cstdio>
#include<iostream>
using namespace std;
typedef long long LL; const int N = 1e5;
const LL mod = 1e9 + 7;
int lim , n , m , a[25][N + 5] , cnt[25][N + 5] , phi[N + 5] , prime[N + 5] , vis[N + 5] , tot;
LL ans; inline void getPhi()
{
phi[1] = 1;
for(register int i = 2; i <= N; i++)
{
if (!vis[i]) phi[prime[++tot] = i] = i - 1;
for(register int j = 1; j <= tot && prime[j] * i <= N; j++)
{
vis[prime[j] * i] = 1;
if (i % prime[j] == 0)
{
phi[prime[j] * i] = phi[i] * prime[j];
break;
}
phi[prime[j] * i] = phi[i] * (prime[j] - 1);
}
}
} inline void getCnt()
{
for(register int i = 1; i <= n; i++)
for(register int j = 1; j <= lim; j++)
for(register int k = 2; k * j <= lim; k++)
cnt[i][j] += cnt[i][j * k];
} int main()
{
freopen("b.in" , "r" , stdin);
freopen("b.out" , "w" , stdout);
scanf("%d%d" , &n , &m);
for(register int i = 1; i <= n; i++)
for(register int j = 1; j <= m; j++)
scanf("%d" , &a[i][j]) , cnt[i][a[i][j]]++ , lim = max(lim , a[i][j]);
getPhi() , getCnt();
for(register int d = 1; d <= lim; d++)
{
LL res = 1;
for(register int j = 1; j <= n; j++) res = res * (LL)(cnt[j][d] + 1) % mod;
ans = (ans + (LL)((LL)phi[d] * (res - 1)) % mod) % mod;
}
printf("%lld" , ans);
}

JZOJ 5843.B的更多相关文章

  1. (jzoj snow的追寻)线段树维护树的直径

    jzoj snow的追寻 DFS序上搞 合并暴力和,记录最长链和当前最远点,距离跑LCA # include <stdio.h> # include <stdlib.h> # ...

  2. [jzoj]3506.【NOIP2013模拟11.4A组】善良的精灵(fairy)(深度优先生成树)

    Link https://jzoj.net/senior/#main/show/3506 Description 从前有一个善良的精灵. 一天,一个年轻人B找到她并请他预言他的未来.这个精灵透过他的水 ...

  3. [jzoj]3468.【NOIP2013模拟联考7】OSU!(osu)

    Link https://jzoj.net/senior/#main/show/3468 Description osu 是一款群众喜闻乐见的休闲软件. 我们可以把osu的规则简化与改编成以下的样子: ...

  4. [jzoj]5478.【NOIP2017提高组正式赛】列队

    Link https://jzoj.net/senior/#main/show/5478 Description Sylvia 是一个热爱学习的女孩子.       前段时间,Sylvia 参加了学校 ...

  5. [jzoj]1115.【HNOI2008】GT考试

    Link https://jzoj.net/senior/#main/show/1115 Description 申准备报名参加GT考试,准考证号为n位数X1X2X3...Xn-1Xn(0<=X ...

  6. [jzoj]2538.【NOIP2009TG】Hankson 的趣味题

    Link https://jzoj.net/senior/#main/show/2538 Description Hanks 博士是BT (Bio-Tech,生物技术) 领域的知名专家,他的儿子名叫H ...

  7. [jzoj]4216.【NOIP2015模拟9.12】平方和

    Link https://jzoj.net/senior/#main/show/4216 Description 给出一个N个整数构成的序列,有M次操作,每次操作有一下三种: ①Insert Y X, ...

  8. [jzoj]2938.【NOIP2012模拟8.9】分割田地

    Link https://jzoj.net/senior/#main/show/2938 Description 地主某君有一块由2×n个栅格组成的土地,有k个儿子,现在地主快要终老了,要把这些土地分 ...

  9. [jzoj]2505.【NOIP2011模拟7.29】藤原妹红

    Link https://jzoj.net/senior/#main/show/2505 Description 在幻想乡,藤原妹红是拥有不老不死能力的人类.虽然不喜欢与人们交流,妹红仍然保护着误入迷 ...

  10. [jzoj]3875.【NOIP2014八校联考第4场第2试10.20】星球联盟(alliance)

    Link https://jzoj.net/senior/#main/show/3875 Problem 在遥远的S星系中一共有N个星球,编号为1…N.其中的一些星球决定组成联盟,以方便相互间的交流. ...

随机推荐

  1. win7修改开机动画

    开机动画的修改 首先win7的过场动画是存在于C:\Windows\System32\bootres.dll ,而修改过程动画就需要修改这个dll,我不会改,所以只能用工具美化大师,软媒魔方里面的一个 ...

  2. ArcEngine 释放对象

    释放对象 例如IFeatureCursor,IFeatureClass等 ESRI.ArcGIS.ADF.ComReleaser.ReleaseCOMObject(myFeatureCursor); ...

  3. 有来实验室|第一篇:Seata1.5.2版本部署和开源全栈商城订单支付业务实战

    在线体验:Seata实验室 一. 前言 相信 youlai-mall 的实验室大家有曾在项目中见到过,但应该都还处于陌生的阶段,毕竟在此之前实验室多是以概念般的形式存在,所以我想借着此次的机会,对其进 ...

  4. 预编译SQL为什么能够防止SQL注入

    前言 之前我一个搞网络安全的朋友问了我一个的问题,为啥用 PreparedStatement 预编译的 SQL 就不会有被 SQL 注入的风险? 第一时间我联想到的是八股文中关于 Mybatis 的脚 ...

  5. python模块的含义

    目录 模块简介 模块的本质 python模块的历史 python模块的表现形式 模块的分类 导入模块的两种句式 强调 import句式 import流程推导 练习 from...import...句式 ...

  6. 使用xshell连接linux虚拟机

    目录 1.涉及的软件 2.连接步骤 2.1.虚拟机网络连接设置 2.2.配置linux的ip地址 2.3.关闭linux的防火墙 2.4.启动ssh服务 2.5.使用xshell连接linux 1.涉 ...

  7. [常用工具] git基础学习笔记

    git基础学习笔记,参考视频:1小时玩转 Git/Github 添加推送信息,-m= message git commit -m "添加注释" 查看状态 git status 显示 ...

  8. ArcGIS插件-太乐地图

    在很多行业,打败你的往往不是竞争对手,而是你意想不到的其他因素.回想十年前,如果能预料到现在的处境,也许当时的心态和做法会有所不同.在多年前,市场上出现包括水经注.太乐.BigeMap.91卫图等多种 ...

  9. day07-Vue04

    Vue04 12.Vue2 脚手架模块化开发 目前开发模式的问题: 开发效率低 不够规范 维护和升级,可读性比较差 12.1基本介绍 官网地址 什么是Vue Cli脚手架 12.2环境配置,搭建项目 ...

  10. VUE基础之:visible.sync-模态框显示隐藏、elementUI dialog组件报错或者visible属性不生效问题

    VUE基础之:visible.sync-模态框显示隐藏.elementUI dialog组件报错或者visible属性不生效问题 这篇文档存成草稿2年了,最近终于有时间拉出来写完了.... 我们日常开 ...