rt,赛时刚了很久都没调出来。
Vn=n10log10(n+1)−110log10(n+1)∗n−1
不太会LaTeX,看代码也许好一点。
#include<bits/stdc++.h>
#define int __int128
using namespace std;
const int mod = 998244353;
char buf[1 << 20],*p1,*p2;
#define getc() getchar()
int read(){int x = 0,w = 1;char cc = getc();if(cc < '0' || cc > '9'){if(cc == '-')w = -1;cc = getc();}while(cc <= '9' && cc >= '0'){x = x * 10 + (cc ^ 48);cc = getc();}return x * w;}
inline void print(int x){if(x < 0){x = -x;putchar('-');}if(x > 9)print(x / 10);putchar(x % 10 + 48);}
int ans;
int ksc(int a, int k, int p) // 龟速乘
{
int res = 0;
while (k)
{
if (k & 1) res = (res + a) % p;
a = (a + a) % p;
k >>= 1;
}
return res;
}
int ksm(int a,int b){
int ans = 1;
while(b){
if(b & 1)ans = ksc(ans,a,mod);
a = ksc(a,a,mod);
b >>= 1;
}
return ans % mod;
}
int getinv(int n,int md) {return ksm(n,md - 2) % mod;}
signed main(){
long long n;
n = read();
int len = n - 1,L = floor(log10(n) + 1);
int ny = getinv(ksm(10,L) - 1,mod);
print(((n % mod) * ((ksm(10,(L * (len + 1)) % mod) - 1) * (ny % mod)) % mod) % mod);
return 0;
}
n≤10 时验证了是对的。