K Sum

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

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

#include<bits/stdc++.h>
using namespace std;
#define int long long
#define maxn 1000000+10
int P[maxn],g[maxn];
bool vis[maxn]; unordered_map<int,int> mp;
int T,n,k;
const int mod =(1e9+);
int cnt=;
void init()
{
g[]=;
for(int i=;i<maxn;i++){
g[i]=;
}
for(int i=; i<maxn; i++)
{
//g[i]=1;
if(!vis[i])
{
P[cnt++]=i;
g[i]=(i*i-)%mod;
}
for(int j=; j<cnt&&(P[j]*i)<maxn; j++)
{
vis[i*P[j]]=;
g[P[j]*i]=(g[P[j]]*g[i]%mod);
if(i%P[j]==)
{
g[P[j]*i]=(g[i]*(P[j]*P[j])%mod)%mod;
break;
} }
}
for(int i=; i<maxn; i++)
{
g[i]=(g[i]+g[i-]+mod)%mod;
}
}
int qp(int x,int n)
{
int ans=; while(n)
{
if(n&)
{
ans=(ans*x)%mod;
}
x=(x*x)%mod;
n>>=;
}
return ans%mod;
}
int _k;
int Sum(int x,int n)
{
if(x==)
{
return (_k-+mod)%mod;
}
else
{
return (((x*(qp(x,n)-+mod)%mod)%mod*qp((x-)%mod,mod-)%mod)%mod-x+mod)%mod;
}
}
int Sum2(int n)
{
int ans=qp(,mod-);
ans=(ans*((n*(n+)%mod)%mod*(*n%mod+)%mod)%mod)%mod;
return ans;
}
int G(int n)
{
int ans=;
int r;
for(int i=; i<=n; i=r+)
{
r=n/(n/i);
int x=n/i;
if(x<maxn)
{
ans=(ans+g[x]*(r-i+))%mod;
}
else if(mp[x])
{
ans=(ans+mp[x]*(r-i+))%mod;
}
else ans=(ans+G(x)*(r-i+))%mod;
} mp[n]=(Sum2(n)-ans+mod)%mod;
return mp[n];
}
int cal(int x)
{
if(x<maxn)return g[x];
if(mp[x])return mp[x];
return G(x);
}
char s[maxn];
signed main()
{
init();
int ans=;
scanf("%lld",&T);
//string s;
while(T--)
{
ans=;
scanf("%lld",&n);
scanf("%s",s);
k=;
_k=;
int _n=strlen(s);
for(int i=; i<_n; i++)
{
_k=(_k*+s[i]-'')%(mod);
k=((k*)+s[i]-'')%(mod-);
}
int r; for(int i=; i<=n; i=r+) ///i
{
r=n/(n/i);
ans=(ans+((Sum((n/i),k))%mod*(cal(r)-cal(i-)+mod)%mod)%mod)%mod;
}
cout<<ans<<'\n';
} }

最新文章

  1. Error:Execution failed for task &#39;:app:transformClassesWithDexForDebug&#39;解决记录
  2. linux 最小安装 需要的后续操作
  3. PAT乙级 1002. 写出这个数 (20)
  4. 年薪10W和100w的人差距在哪?
  5. linux硬件时间修改与查看
  6. 【递归】数字三角形 简单dp
  7. Cocos2d-x 对于中文的支持-----iconv库
  8. 使用powerdesigner 画图的详细说明
  9. The Flat Dictionary
  10. input时间输入框小解
  11. 转:sqlplus与shell互相传值的几种情况
  12. delphi 中COPY()函数的意思
  13. 6.QT信号和槽
  14. 《Oracle Applications DBA 基础》- 9 - Concurrent Processing
  15. call(),apply()和bind()的区别
  16. [转] 用webpack的CommonsChunkPlugin提取公共代码的3种方式
  17. windows下设置计划任务自动执行PHP脚本
  18. node-express根据请求,判断PC和移动端
  19. Linux let 命令
  20. JAVA多态计算面积main函数调用方法

热门文章

  1. [转帖]linux文件描述符文件/etc/security/limits.conf
  2. 【转帖】UDIMM、RDIMM、SODIMM以及LRDIMM的区别
  3. 【转帖】联芸Maxio展示国产PCIe SSD主控:速度可达3.5GB/s
  4. redis 无序集合 数据类型
  5. Python_2day
  6. CSS 相对定位 绝对定位
  7. 微信小程序实现滑动删除效果
  8. Winform CheckBox组,先横向排列,后纵向排列,点击文字,改变Checkbox的状态的方法
  9. Java获取文件的后缀名。
  10. java复习(1)面向对象