题目

题解

等比数列,最后统一除以(x-1)(这里数据都存在逆元。。。。)

(不存在逆元可以考虑表示成:x*p^y的pair形式,最后上下把p的次数相减(类似扩展Lucas)

具体操作:(a,b)*(c,d)=(a*c,b+d)

然后检查(a,b):如果a%mod==0,(a,b)->(a/mod,b+1),否则(a,b)->(a%mod,b)

显然这样取模,mod的次数不会减少。

求:lcm(x^(ai+1)-1)

令f(a)=x^(a+1)-1

一看,根本无法直接做

上一个这样lcm的是:51nod斐波那契最小公倍数,gcd(f[a],f[b])=f[gcd(a,b)]

利用gcd和lcm的容斥关系!

这个是否也可以?

不妨考虑gcd(f(a),f(b))

发现,利用辗转相减可以证明:gcd(f(a),f(b))=gcd(f(b),f(a-b))=f(gcd(a,b))

但是要考虑所有的集合。。。

结论:gcd不会太多

开个map,暴力遍历枚举

每个map[i].fi存gcd,map[i].se存这个gcd贡献的指数次数(上-下)

拼凑ai新加的gcd把原来贡献取反加入即可。

最后++map[a[i]]

  1. #include<bits/stdc++.h>
  2. #define reg register int
  3. #define il inline
  4. #define fi first
  5. #define se second
  6. #define mk(a,b) make_pair(a,b)
  7. #define numb (ch^'0')
  8. #define pb push_back
  9. #define solid const auto &
  10. #define enter cout<<endl
  11. using namespace std;
  12. typedef long long ll;
  13. template<class T>il void rd(T &x){
  14. char ch;x=;bool fl=false;
  15. while(!isdigit(ch=getchar()))(ch=='-')&&(fl=true);
  16. for(x=numb;isdigit(ch=getchar());x=x*+numb);
  17. (fl==true)&&(x=-x);
  18. }
  19. template<class T>il void output(T x){if(x/)output(x/);putchar(x%+'');}
  20. template<class T>il void ot(T x){if(x<) putchar('-'),x=-x;output(x);putchar(' ');}
  21. template<class T>il void prt(T a[],int st,int nd){for(reg i=st;i<=nd;++i) ot(a[i]);putchar('\n');}
  22.  
  23. namespace Miracle{
  24. const int N=;
  25. const int mod=1e9+;
  26. ll x,n;
  27. ll a[N];
  28. int qm(int x,int y){
  29. int ret=;
  30. while(y){
  31. if(y&) ret=(ll)ret*x%mod;
  32. x=(ll)x*x%mod;
  33. y>>=;
  34. }
  35. return ret;
  36. }
  37. unordered_map<int,int>mp,t;
  38. int gcd(int a,int b){
  39. return b?gcd(b,a%b):a;
  40. }
  41. int main(){
  42. rd(x);rd(n);
  43. x%=mod;
  44. for(reg i=;i<=n;++i) rd(a[i]),++a[i];
  45. for(reg i=;i<=n;++i){
  46. t=mp;
  47. for(solid j:mp){
  48. int g=gcd(j.fi,a[i]);
  49. t[g]+=-j.se;
  50. }
  51. t[a[i]]++;
  52. mp.swap(t);
  53. }
  54. ll ans=;
  55. for(solid j:mp){
  56. if(j.se>=) ans=ans*qm((qm(x,j.fi)+mod-)%mod,j.se)%mod;
  57. else ans=ans*qm(qm((qm(x,j.fi)+mod-)%mod,-j.se),mod-)%mod;
  58. }
  59. ans=(ll)ans*qm((x+mod-)%mod,mod-)%mod;
  60. ot(ans);
  61. return ;
  62. }
  63.  
  64. }
  65. signed main(){
  66. Miracle::main();
  67. return ;
  68. }
  69.  
  70. /*
  71. Author: *Miracle*
  72. */

min-max容斥吼啊

结论吼啊

暴力吼啊

luoguP3598 Koishi Loves Number Theory的更多相关文章

  1. E 洛谷 P3598 Koishi Loves Number Theory[数论]

    题目描述 Koishi十分喜欢数论. 她的朋友Flandre为了检测她和数论是不是真爱,给了她一个问题. 已知 给定和个数,求对取模. 按照套路,呆萌的Koishi当然假装不会做了,于是她来向你请教这 ...

  2. 【BZOJ4026】dC Loves Number Theory 分解质因数+主席树

    [BZOJ4026]dC Loves Number Theory Description  dC 在秒了BZOJ 上所有的数论题后,感觉萌萌哒,想出了这么一道水题,来拯救日益枯竭的水题资源.    给 ...

  3. BZOJ_4026_dC Loves Number Theory _主席树+欧拉函数

    BZOJ_4026_dC Loves Number Theory _主席树+欧拉函数 Description  dC 在秒了BZOJ 上所有的数论题后,感觉萌萌哒,想出了这么一道水题,来拯救日益枯 竭 ...

  4. BZOJ4026: dC Loves Number Theory

    Description  dC 在秒了BZOJ 上所有的数论题后,感觉萌萌哒,想出了这么一道水题,来拯救日益枯 竭的水题资源.    给定一个长度为 n的正整数序列A,有q次询问,每次询问一段区间内所 ...

  5. bzoj 4026 dC Loves Number Theory

    把我写吐了 太弱了 首先按照欧拉函数性质 我只需要统计区间不同质数个数就好了 一眼主席树 其次我被卡了分解质因数这里 可以通过质数筛时就建边解决 不够灵性啊,不知道如何改 #include<bi ...

  6. [BZOJ4026]dC Loves Number Theory(线段树)

    根据欧拉函数的定义式可知,可以先算出a[l]*a[l+1]*...*a[r]的值,然后枚举所有存在的质因子*(p-1)/p. 发现这里区间中一个质因子只要计算一次,所以指计算“上一个同色点在区间外”的 ...

  7. 【bzoj4026】dC Loves Number Theory 可持久化线段树

    题目描述 dC 在秒了BZOJ 上所有的数论题后,感觉萌萌哒,想出了这么一道水题,来拯救日益枯竭的水题资源.  给定一个长度为 n的正整数序列A,有q次询问,每次询问一段区间内所有元素乘积的φ(φ(n ...

  8. bzoj 4026 dC Loves Number Theory 主席树+欧拉函数

    题目描述 dC 在秒了BZOJ 上所有的数论题后,感觉萌萌哒,想出了这么一道水题,来拯救日益枯竭的水题资源.给定一个长度为 n的正整数序列A,有q次询问,每次询问一段区间内所有元素乘积的φ(φ(n)代 ...

  9. BZOJ 4026 dC Loves Number Theory (主席树+数论+欧拉函数)

    题目大意:给你一个序列,求出指定区间的(l<=i<=r) mod 1000777 的值 还复习了欧拉函数以及线性筛逆元 考虑欧拉函数的的性质,(l<=i<=r),等价于 (p[ ...

随机推荐

  1. Vue.js实现注册功能

    编写html,通过vue-resource.js库向后台提交数据 <!DOCTYPE html> <html lang="en"> <head> ...

  2. Mac Java Idea 下面Git配置简要教程

    Mac Java Idea 配置简要教程(Sunplay) 1.找到git路径 终端输入:which git 2.在idea的设置git路径 3.测试Git的效果 测试Git成功的效果

  3. 微信小程序之菜鸟入门教学(二)

    昨天学习了一些简单的概念,今天开始实际操作,通过搭建简单的计算器来学习小程序的架构 一.小程序框架 程序框架如上图所示.由此可见,框架的基本构成为: 1. app.js . app.wxss 2. a ...

  4. Your project path contains non-ASCII characters

    Android studio导入project时报错 non-ASCII characters意味着中文字符报错,解决方法简单有效: 检查项目路径中是否出现中文名,将中文字符修改成英文就可以解决辽~

  5. 解决SVN Cleanup错误: Failed to run the WC DB work queue associated with

    [内容来源自https://www.cnblogs.com/ANCAN-RAY/p/8961832.html] 在svn本地目录更新文件夹时,更新失败. 然后svn提示我,让我cleanup一下,于是 ...

  6. Oracle下载与Oracle安装图解(Oracle19c,Oracle18c,Oracle12c,Oracle11g)

    Oracle下载与Oracle安装图解(Oracle19c,Oracle18c,Oracle12c,Oracle11g) 1.Oracle下载(Oracle11g) oracle下载方法,请根据以下步 ...

  7. yum 安装 python-pip 失败解决方法

    这个包在EPEL源里,要添加EPEL源才可以.然后按博客里说的方法添加,执行以下命令: sudo rpm -ivh epel-release* 第一种方式:由于epel在禁用列表里需要另外加参数yum ...

  8. 【原】无脑操作:IDEA热部署设置

    热部署的概念:在应用正在运行的时候升级软件,却不需要重新启动应用.对于Java应用程序来说,热部署就是在运行时更新Java类文件. 注意:经过试验,IDEA 2017可以使用热部署,IDEA 14不行 ...

  9. 教你在浏览器里做出EXCEL的效果

    在浏览器里做出EXCEL的效果,复制.粘贴.设置公式.双击编辑等效果,如果自己开发的话,比较麻烦,建议使用成熟的插件.这里介绍使用智表ZCELL插件,实现用户快捷操作. 首先下载插件,引入到页面中,一 ...

  10. 数据库【redis】基本命令

    redis常用命令大全   1.基于内存的key-value数据库 2.基于c语言编写的,可以支持多种语言的api //set每秒11万次,取get 81000次 3.支持数据持久化 4.value可 ...