K Sum

终于过了这玩意啊啊啊====

莫比乌斯反演,杜教筛,各种分块,积性函数怎么线性递推还很迷==,得继续研究研究

  1. #include<bits/stdc++.h>
  2. using namespace std;
  3. #define int long long
  4. #define maxn 1000000+10
  5. int P[maxn],g[maxn];
  6. bool vis[maxn];
  7.  
  8. unordered_map<int,int> mp;
  9. int T,n,k;
  10. const int mod =(1e9+);
  11. int cnt=;
  12. void init()
  13. {
  14. g[]=;
  15. for(int i=;i<maxn;i++){
  16. g[i]=;
  17. }
  18. for(int i=; i<maxn; i++)
  19. {
  20. //g[i]=1;
  21. if(!vis[i])
  22. {
  23. P[cnt++]=i;
  24. g[i]=(i*i-)%mod;
  25. }
  26. for(int j=; j<cnt&&(P[j]*i)<maxn; j++)
  27. {
  28. vis[i*P[j]]=;
  29. g[P[j]*i]=(g[P[j]]*g[i]%mod);
  30. if(i%P[j]==)
  31. {
  32. g[P[j]*i]=(g[i]*(P[j]*P[j])%mod)%mod;
  33. break;
  34. }
  35.  
  36. }
  37. }
  38. for(int i=; i<maxn; i++)
  39. {
  40. g[i]=(g[i]+g[i-]+mod)%mod;
  41. }
  42. }
  43. int qp(int x,int n)
  44. {
  45. int ans=;
  46.  
  47. while(n)
  48. {
  49. if(n&)
  50. {
  51. ans=(ans*x)%mod;
  52. }
  53. x=(x*x)%mod;
  54. n>>=;
  55. }
  56. return ans%mod;
  57. }
  58. int _k;
  59. int Sum(int x,int n)
  60. {
  61. if(x==)
  62. {
  63. return (_k-+mod)%mod;
  64. }
  65. else
  66. {
  67. return (((x*(qp(x,n)-+mod)%mod)%mod*qp((x-)%mod,mod-)%mod)%mod-x+mod)%mod;
  68. }
  69. }
  70. int Sum2(int n)
  71. {
  72. int ans=qp(,mod-);
  73. ans=(ans*((n*(n+)%mod)%mod*(*n%mod+)%mod)%mod)%mod;
  74. return ans;
  75. }
  76. int G(int n)
  77. {
  78. int ans=;
  79. int r;
  80. for(int i=; i<=n; i=r+)
  81. {
  82. r=n/(n/i);
  83. int x=n/i;
  84. if(x<maxn)
  85. {
  86. ans=(ans+g[x]*(r-i+))%mod;
  87. }
  88. else if(mp[x])
  89. {
  90. ans=(ans+mp[x]*(r-i+))%mod;
  91. }
  92. else ans=(ans+G(x)*(r-i+))%mod;
  93. }
  94.  
  95. mp[n]=(Sum2(n)-ans+mod)%mod;
  96. return mp[n];
  97. }
  98. int cal(int x)
  99. {
  100. if(x<maxn)return g[x];
  101. if(mp[x])return mp[x];
  102. return G(x);
  103. }
  104. char s[maxn];
  105. signed main()
  106. {
  107. init();
  108. int ans=;
  109. scanf("%lld",&T);
  110. //string s;
  111. while(T--)
  112. {
  113. ans=;
  114. scanf("%lld",&n);
  115. scanf("%s",s);
  116. k=;
  117. _k=;
  118. int _n=strlen(s);
  119. for(int i=; i<_n; i++)
  120. {
  121. _k=(_k*+s[i]-'')%(mod);
  122. k=((k*)+s[i]-'')%(mod-);
  123. }
  124. int r;
  125.  
  126. for(int i=; i<=n; i=r+) ///i
  127. {
  128. r=n/(n/i);
  129. ans=(ans+((Sum((n/i),k))%mod*(cal(r)-cal(i-)+mod)%mod)%mod)%mod;
  130. }
  131. cout<<ans<<'\n';
  132. }
  133.  
  134. }

南京网络赛 E K Sum的更多相关文章

  1. HDU 4750 Count The Pairs (2013南京网络赛1003题,并查集)

    Count The Pairs Time Limit: 20000/10000 MS (Java/Others)    Memory Limit: 65535/65535 K (Java/Others ...

  2. 2018ICPC南京网络赛

    2018ICPC南京网络赛 A. An Olympian Math Problem 题目描述:求\(\sum_{i=1}^{n} i\times i! \%n\) solution \[(n-1) \ ...

  3. 2019ICPC南京网络赛A题 The beautiful values of the palace(三维偏序)

    2019ICPC南京网络赛A题 The beautiful values of the palace https://nanti.jisuanke.com/t/41298 Here is a squa ...

  4. HDU 4751 Divide Groups (2013南京网络赛1004题,判断二分图)

    Divide Groups Time Limit: 2000/1000 MS (Java/Others)    Memory Limit: 32768/32768 K (Java/Others)Tot ...

  5. HDU 4758 Walk Through Squares (2013南京网络赛1011题,AC自动机+DP)

    Walk Through Squares Time Limit: 4000/2000 MS (Java/Others)    Memory Limit: 65535/65535 K (Java/Oth ...

  6. 2019-ACM-ICPC-南京区网络赛-E. K Sum-杜教筛+欧拉定理

    2019-ACM-ICPC-南京区网络赛-E. K Sum-杜教筛+欧拉定理 [Problem Description] 令\(f_n(k)=\sum_{l_1=1}^n\sum_{l_2=1}^n\ ...

  7. 2019 南京网络赛A

    南京网络赛自闭现场 https://nanti.jisuanke.com/t/41298 二维偏序经典题型 二维前缀和!!! #include<bits/stdc++.h> using n ...

  8. 2019年南京网络赛E题K Sum(莫比乌斯反演+杜教筛+欧拉降幂)

    目录 题目链接 思路 代码 题目链接 传送门 思路 首先我们将原式化简: \[ \begin{aligned} &\sum\limits_{l_1=1}^{n}\sum\limits_{l_2 ...

  9. 2019南京网络赛E:K Sum

    Description: 定义函数 \[ f _n (k) = \sum _{l _1 = 1} ^n \sum _{l _2 = 1} ^n \cdots \sum _{l _k = 1} ^n \ ...

随机推荐

  1. [转帖]影驰首发PCIe 4.0 SSD:群联AMD合作主控飚出5GB/s

    影驰首发PCIe 4.0 SSD:群联AMD合作主控飚出5GB/s https://www.cnbeta.com/articles/tech/851275.htm 硬件发展的真快.. AMD刚刚发布的 ...

  2. git部分命令笔记

    目录 配置user信息 建Git仓库 清空暂存区 git变更文件名 查看暂存区状态 查看历史 查看本地分支 查看所有分支(包含远程) 创建分支 基于远程分支创建本地新分支 查看图形化分支日志 图形化界 ...

  3. vim 文本编辑器

    vim 文件名:命令模式 i 编辑模式 :输入模式 vim +n 文件名:打开文件,将光标置于第N行首部 命令模式进入输入模式进行编辑: i 当前光标位置插入文本 I 在当前行行首插入文本 o 在光标 ...

  4. RedHat7安装yum工具

    一                   RedHat7安装yum工具 1.1        查看yum是否可用 yum list yum repolist 1.2        卸载原yum rpm ...

  5. zabbix 问题

    初始化账号和密码 Admin zabbix 出现 :Zabbix server is running No检查zabbix是否有运行 ps -ef|grep zabbix systemctl rest ...

  6. Big Data(七)MapReduce计算框架

    二.计算向数据移动如何实现? Hadoop1.x(已经淘汰): hdfs暴露数据的位置 1)资源管理 2)任务调度 角色:JobTracker&TaskTracker JobTracker: ...

  7. scp 远程文件复制命令

    scp 远程文件复制工具 1.命令功能 scp用户在不同linux主机间复制文件,他采用ssh协议保障复制的安全性.scp复制是全量完整复制,效率不高,使用与第一次复制,增量复制建议rsync命令. ...

  8. exe 错误

    1,NTVDM 是从 WINDOWS NT 架构开始引入的一个子系统进程,目的是虚拟一个DOS环境来运行以前的DOS 16bit 程序.2,只有当启动16位DOS程序时,才会启用 NTVDM 这个进程 ...

  9. 第二章Python入门

    第二章 Python入门 2.1.简介 Python是著名的"龟叔"(Guido van Rossum)在1989年圣诞节期间,为了打发无聊的圣诞节而编写的一个编程语言 Pytho ...

  10. LOJ-6279-数列分块入门3(分块, 二分)

    链接: https://loj.ac/problem/6279 题意: 给出一个长为 的数列,以及 个操作,操作涉及区间加法,询问区间内小于某个值 的前驱(比其小的最大元素). 思路: 同样的分块加二 ...