题面
题目描述
对于正整数 𝑁,令 𝑉𝑁 表示由 𝑁 重复 𝑁 次所形成的整数。更具体地,将 𝑁 视为字符串,将其复制 𝑁 次并将结果视为整数,得到 𝑉𝑁。例如,𝑉3=333,𝑉10=10101010101010101010。
求𝑉𝑁 除以 998244353998244353 的余数。
输入格式
一行一个整数 𝑁(1≤𝑁≤10^18)
输出格式
一个整数,𝑉𝑛 除以 998244353998244353 的余数
输入数据1
5
输出数据1
55555
输入数据2
9
输出数据2
1755646
思路
很明显的一道乘法逆元的题
先得到 n 的数位len,如输入数据1 那么公比 q = 10^len
最终结果就是求 Vn % mod = % mod = % mod
结果可能会很大,用上乘法逆元引入费马小定理,最终 % mod = (q-1)^(mod-2)) % mod
Code
#include<bits/stdc++.h>
using namespace std;
#define ll long long
int fast_io=[](){
ios::sync_with_stdio(false);
cin.tie(0);
cout.tie(0);
return 0;
}();
const ll mod = 998244353;
ll ws(ll n){
ll ans=0;
while(n){
ans++;
n/=10;
}
return ans;
}
inline ll quick(ll b,ll p){
ll ans=1;
while(p){
if(p&1)
ans=ans*b%mod;
b=b*b%mod;
p>>=1;
}
return ans;
}
inline ll qy(ll n){
return (n%mod+mod)%mod;
}
void qwqwq(){
ll n,len,q,ans;
cin >> n;
len=ws(n);
q=quick(10,len);
// 费马小定理
ans=qy(qy(qy(n)*qy(quick(q,n)-1))*qy(quick(q-1,mod-2)));
cout << ans;
}
int main(){
qwqwqw();
return 0;
}