专栏文章
题解:AT_arc202_c [ARC202C] Repunits
AT_arc202_c题解参与者 1已保存评论 0
文章操作
快速查看文章及其快照的属性,并进行相关操作。
- 当前评论
- 0 条
- 当前快照
- 1 份
- 快照标识符
- @min3txhj
- 此快照首次捕获于
- 2025/12/01 20:07 3 个月前
- 此快照最后确认于
- 2025/12/01 20:07 3 个月前
先是一个观察:,正确性显然。
把 反演了:
很烦,将其转成有关因数的。设 ,则:
莫反求出 数组,然后就做完了。
CPP
/*
2025.11.20
* Happy Zenith Noises *
*/
#include<bits/stdc++.h>
#define int long long
#define pb push_back
#define fi first
#define se second
using namespace std;
typedef pair<int,int>P;
const int MAXN=200005,inf=0x3f3f3f3f3f3f3f3f,mod=998244353;
int n,a[MAXN],mu[MAXN],ff[MAXN],f[MAXN],R[MAXN],IR[MAXN],ans=1;
bool vis[MAXN];
vector<int>pri,p[MAXN];
int pw(int base,int t){
int ans=1;
while(t){
if(t&1)ans=ans*base%mod;
base=base*base%mod,t>>=1;
}
return ans;
}
signed main(){
ios::sync_with_stdio(0);cin.tie(nullptr);
cin>>n;
for(int i=1;i<=n;i++)cin>>a[i];
mu[1]=1;f[1]=1;
for(int i=2;i<MAXN;i++){
f[i]=1;
if(!ff[i])pri.pb(i),mu[i]=-1;
for(int j:pri){
if(j*i>=MAXN)break;
ff[j*i]=1;
if(i%j==0){mu[i*j]=0;break;}
mu[i*j]=-mu[i];
}
}
for(int i=1;i<MAXN;i++)R[i]=(R[i-1]*10+1)%mod,IR[i]=pw(R[i],mod-2);
for(int i=1;i<MAXN;i++)for(int j=i;j<MAXN;j+=i){
p[j].pb(i);
if(mu[j/i]==1)f[j]=(f[j]*R[i])%mod;
if(mu[j/i]==-1)f[j]=f[j]*IR[i]%mod;
}
for(int i=1;i<=n;i++){
for(int j:p[a[i]])if(!vis[j])vis[j]=1,ans=ans*f[j]%mod;
cout<<ans<<'\n';
}
return 0;
}
相关推荐
评论
共 0 条评论,欢迎与作者交流。
正在加载评论...