题目链接

cf645F

题意

给定长度为n的序列,每次询问向序列中加入一个数,询问序列中所以k元组的gcd之和。

题解

记S表示所以k元组的集合,我们要求的就是

∑s∈Sgcd(s)=∑s∈S∑d|gcd(s)ϕ(d)=∑dϕ(d)∗∑s∈S[gcd(s)=d]=∑dϕ(d)∗Cks[d]

\sum_{s\in S}gcd(s)=\sum_{s \in S}\sum_{d|gcd(s)}\phi(d) \\=\sum_d\phi(d)*\sum_{s \in S}[gcd(s)=d] \\=\sum_d\phi(d)*C_{s[d]}^k
其中 ϕ(d)\phi(d)表示d的欧拉函数值, s[d]s[d]表示含有因子d的数的个数。我们可以预处理出这两个值。
先处理出初始答案,对于每一次询问我们只需要 O(因子个数)O(因子个数)的时间就能动态更新答案。


#include<cstdio>
#include<queue>
#include<stack>
#include<map>
#include<set>
#include<algorithm>
using namespace std;
const int mo=1000000007,N=1000010;
int n,m,k,ans,a[N],s[N];
int p[N],pn,f[N],phi[N],inv[N],fac[N];int power(long long x,int y){int tmp=1;for(;y;y>>=1,x=x*x%mo)if(y&1) tmp=tmp*x%mo;return tmp;
}
void init(){phi[1]=1;for(int i=2;i<=1000000;i++){if(!f[i]) p[++pn]=i,phi[i]=i-1;for(int j=1;j<=pn&&p[j]*i<=1000000;j++){f[p[j]*i]=1;if(i%p[j]==0){phi[i*p[j]]=p[j]*phi[i];break;}phi[i*p[j]]=(p[j]-1)*phi[i];}}fac[0]=1;for(int i=1;i<=1000000;i++) fac[i]=1ll*fac[i-1]*i%mo;inv[1000000]=power(fac[1000000],mo-2);for(int i=999999;~i;i--) inv[i]=1ll*inv[i+1]*(i+1)%mo;
}
long long C(int n,int m){if(n<m) return 0;return 1ll*fac[n]*inv[n-m]%mo*inv[m]%mo;
}
void calc(int x){ans=(ans-phi[x]*C(s[x],k))%mo;s[x]++;ans=(ans+phi[x]*C(s[x],k))%mo;if(ans<0) ans+=mo;
}
int main(){scanf("%d%d%d",&n,&k,&m);for(int i=1;i<=n;i++) scanf("%d",a+i);for(int i=1;i<=n;i++)for(int j=1;j*j<=a[i];j++)if(a[i]%j==0){s[j]++;if(j*j!=a[i]) s[a[i]/j]++;}init();for(int i=1;i<=1000000;i++)ans=(ans+phi[i]*C(s[i],k))%mo;for(int i=1;i<=m;i++){scanf("%d",&a[1]);for(int j=1;j*j<=a[1];j++)if(a[1]%j==0){calc(j);if(j*j!=a[1]) calc(a[1]/j);}printf("%d\n",ans);}return 0;
}

codeforces 645F Cowslip Collections相关推荐

  1. Mobius反演总结

    刷了一些浅显的反演题目, 做一个总结 知识点1 给定n个数(可以是1-n), 求有多少数与x互质 f(x)=∑d|xu[d]∗cnt[d] f(x) = \sum_{d|x}u[d]*cnt[d] 其 ...

  2. 东北大学程序设计夏令营数学

    数学专题 本次训练包含题目 Problem A Mysterious Bacteria Problem B Harmonic Number Problem C Trailing Zeroes (III ...

  3. 怎么获取codeforces的数据_原创 | codeforces 1417C,逆向思考的数据结构题

    点击上方蓝字,关注并星标,和我一起学技术. 大家好,欢迎阅读周末算法题专题. 今天我们选择的是codeforces contest 1417的C题k-Amazing Numbers.这是一道经典的数据 ...

  4. python counter 出现次数最少的元素_[PY3]——找出一个序列中出现次数最多的元素/collections.Counter 类的用法...

    问题 怎样找出一个序列中出现次数最多的元素呢? 解决方案 collections.Counter 类就是专门为这类问题而设计的, 它甚至有一个有用的 most_common() 方法直接给了你答案 c ...

  5. codeforces 651B B. Beautiful Paintings(贪心JAVA代码)

    题目链接: codeforces 651B 题目描述: 给出一组数,重新排列这组数,得到 ai<ai+1 a_i的最多次数,求取这个最多的次数的值. 题目分析: 最优解的情况一定我们找到最小的数 ...

  6. List元素互换,List元素转换下标,Java Collections.swap()方法实例解析

    Java Collections.swap()方法解析 jdk源码: public static void swap(List<?> list, int i, int j) {// ins ...

  7. Python标准库——collections模块的Counter类

    更多16 最近在看一本名叫<Python Algorithm: Mastering Basic Algorithms in the Python Language>的书,刚好看到提到这个C ...

  8. Collections.addAll() 的使用 以及和list.addAll() 的区别

    Collections 是java.util 下的一个类 ,可以直接使用 下面下一个往list 里面添加数据的方法 普通的写法 ArrayList<String> list = new A ...

  9. CodeForces 375D Tree and Queries

    传送门:https://codeforces.com/problemset/problem/375/D 题意: 给你一颗有根树,树上每个节点都有其对应的颜色,有m次询问,每次问你以点v为父节点的子树内 ...

最新文章

  1. 芯片植入:“增强人类”的生物黑科技
  2. PHP问题 —— Warning: PHP Startup: Unable to load dyna
  3. springcloud 2.0 服务链路追踪踩坑以及一些小小的理解
  4. NoSQL之Redis非关系数据库(redis概述,持久化,RDB持久化,AOF持久,内存碎片)
  5. BZOJ 2243 染色(树链剖分好题)
  6. 洛谷P1067 多项式输出
  7. python 元组长度_Python 学习笔记 - 元组
  8. python学习笔记7--面向对象进阶,异常处理,socket编程初识
  9. opencv实战3: CascadeClassifier+Haar特征进行人脸检测
  10. 国产操作系统往事:四十年激变,终再起风云
  11. Linux查看so库访问的IP,linux-ip命令杂记
  12. 从产品驱动看专注和结果导向的关系
  13. Google drive谷歌网盘下载副本文件无法调用IDM解决方法
  14. Appium自动化测试(五)——PO模式(一):短信案例
  15. 无线路由器怎么做一个家庭服务器,家庭路由器怎么做DHCP服务器
  16. 夜晚拍照出现耀斑的原因
  17. Cloudberry Backup Server Edition 1TB Version
  18. 华为路由器 批量生成NAT映射配置
  19. ABB机器人急停、自动停止回路详解
  20. 前端和后端有什么区别?哪个好?

热门文章

  1. [知乎高赞回答]TCP/IP协议到底在讲什么?
  2. 【5G】SRS原理 | SRS天线轮发
  3. 2021全球50家最佳酒吧榜单揭晓,有6家来自中国
  4. python简单成绩录入,python实现简单成绩录入系统
  5. python 1、输入a,b,c解二元一次方程;2、克莱姆法则解线性方程;3、输入今天之后未来的天数,显示今天是星期几;4、输入一个数,检测是否能被5和6整除;5、输入人民币和美元的汇率和转换金额;
  6. 简转繁等中文转换(Golang)
  7. 猿圈 题库_百度传课携手猿圈 接入题库及测评服务
  8. Maxwell 转矩出现正负值情况解决措施
  9. 记录下配置腾讯云服务器的过程
  10. 微信APP支付申请方法