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

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

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

這道題看n=20 m=1e5的範圍就知道不可能進行枚舉算法

枚舉是O(m^n)的,一定會tle,得想更加快速的方法

在計數問題中,我們經常會想到容斥原理

而且這道題的數範圍也只有1e5,我們應該想到按照每一個數的值來計算答案

在這道題之中,計算出“每一行能夠不選或只選1個數,但是必須至少選1個數,要求這些選出來的數被k整除”很容易。只要計cnt[i][j]表示第i行有多少個數是j的倍數。

如何求cnt數組,我們可以記錄cnt[i][j],將cnt[i][a[i][j]]全部+1,代表現在,我們已經存儲了a[i][j]被自己整除的方案了

現在我們知道,當一個數是ak的倍數時,這個數同時也是a的倍數,所以我們可以知道,f[i][kj]可以用來更新f[i][j]。

則ans=(cnt[1][k]+1)(cnt[2][k]+1)…(cnt[n][k]+1)-1

在這道題中,一行有cnt[i][k]個數可以選擇,而且這一行可以一個數都不選,有cnt[i][k]+1種方案,全部乘起來就是答案

但是,我們還有可能一個數都沒有選,這種情況計算了進去,所以最後的方案要-1

在這道題中,我們也可以想到類似的思路

記ans[k]表示全局選出的數能夠被k整除的方案數

則ans[k]=(cnt[1][k]+1)
(cnt[2][k]+1)…(cnt[n][k]+1)-1

用這個公式可以快速計算出所有的ans

但是,這道題要求求的是gcd==k的個數,這個公式不能滿足要求

因為我們選出的方案中,只代表gcd能夠被k整除,而不可以代表“gcd恰好為k的方案數"

實際上,我們還計算出了gcd為2k,gcd為3k等等的方案數,所以我們需要將其減去

設f[i]表示gcd恰好為i的方案數

則f[i]=ans[i]-f[2i]-f[3i]…-f[(n/i)i]

式子的前一項為"gcd被i整除"的方案數,但是我們不需要gcd為2
i,3i…的方案,所以我們在後面將它們減去了。而在這個方程之中,我們可以倒序枚舉i,這樣我們可以保證計算出f[i]前,f[2i],f[3*i]…已經計算出來了

最後,由於題目要求,我們要記錄gcd的和,所以我們要求f[1]*1,f[2]*2…的值

這樣,我們就成功解決了本題

jzoj5843的更多相关文章

随机推荐

  1. 关于UI设计行业的认识再到认识

    相信很多同学和我一样提及到UI行业时,尤其是连门槛都没有踏入半步时,总会一脸茫然. 我也是一样的,我刚接触UI的前半个月,文章读过好多,作品也看过好多,什么"小白入门UI的十大建议啊&quo ...

  2. 01 Maven 安装与配置

    Maven 安装与配置 1. Maven 介绍 Maven 翻译为 "专家","内行".Maven 是 Apache 下的一个纯 Java 开发的开源项目,它是 ...

  3. process_进程池_2

    import multiprocessingimport os, time, random def Lee(): print("\nRun task Lee-%s" %(os.ge ...

  4. 类Pinterest Web原型制作分享——花瓣网

    这是一家基于兴趣的社交分享网站,网站为用户提供了一个简单地采集工具,帮助用户将自己喜欢图片重新组织和收藏.网站布局美观合理,内容丰富.此原型模板所用到的组件有按钮栏.菜单栏.搜索框.水平分割线.交互动 ...

  5. maven web 项目 打入 jar 包 , 和编译入 java 文件到 web-inf 下

    <outputDirectory>src\main\webapp\WEB-INF\classes</outputDirectory> 可以把 类文件编译到 web-inf 下 ...

  6. Git使用1

    1.先配置本地Git E:\personal>git config –-global user.name "lewy" E:\personal>git config – ...

  7. IDEA SpringBoot Deprecated configuration property ‘server.servlet-path’

    错误样式如图所示.说我这个版本中的这个标签是过时的. 解决: 出现这个问题后,这个标签被IDEA化成了黄线,同时,想使用server.servlet-path=*.html,配置servlet路径跳转 ...

  8. 2015 - 4- 21 iOS开发越狱环境的搭建1

    2015 - 4- 20   1. 越狱环境的搭建   http://www.iduuke.com/2030.html http://www.cnblogs.com/xiongwj0910/archi ...

  9. (最小生成树 )还是畅通工程 -- HDU--1233

    链接: http://acm.hdu.edu.cn/showproblem.php?pid=1233 http://acm.hust.edu.cn/vjudge/contest/view.action ...

  10. Oracle实现递归查询

    前几天在开发的过程中遇到一个递归查询的问题,java代码大致是这样的: // 递归得到四级机构对象 public UserManagerDept getuserManagerDeptBy(String ...