南京网络赛 E K Sum
2024-09-05 17:10:39
终于过了这玩意啊啊啊====
莫比乌斯反演,杜教筛,各种分块,积性函数怎么线性递推还很迷==,得继续研究研究
#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';
} }
最新文章
- Error:Execution failed for task &#39;:app:transformClassesWithDexForDebug&#39;解决记录
- linux 最小安装 需要的后续操作
- PAT乙级 1002. 写出这个数 (20)
- 年薪10W和100w的人差距在哪?
- linux硬件时间修改与查看
- 【递归】数字三角形 简单dp
- Cocos2d-x 对于中文的支持-----iconv库
- 使用powerdesigner 画图的详细说明
- The Flat Dictionary
- input时间输入框小解
- 转:sqlplus与shell互相传值的几种情况
- delphi 中COPY()函数的意思
- 6.QT信号和槽
- 《Oracle Applications DBA 基础》- 9 - Concurrent Processing
- call(),apply()和bind()的区别
- [转] 用webpack的CommonsChunkPlugin提取公共代码的3种方式
- windows下设置计划任务自动执行PHP脚本
- node-express根据请求,判断PC和移动端
- Linux let 命令
- JAVA多态计算面积main函数调用方法
热门文章
- [转帖]linux文件描述符文件/etc/security/limits.conf
- 【转帖】UDIMM、RDIMM、SODIMM以及LRDIMM的区别
- 【转帖】联芸Maxio展示国产PCIe SSD主控:速度可达3.5GB/s
- redis 无序集合 数据类型
- Python_2day
- CSS 相对定位 绝对定位
- 微信小程序实现滑动删除效果
- Winform CheckBox组,先横向排列,后纵向排列,点击文字,改变Checkbox的状态的方法
- Java获取文件的后缀名。
- java复习(1)面向对象