#include <stdio.h>
const int mo=998244353, ni=828542813;
int n, m, i, j, k, f[200005];
int mi(long long a, int b){
    int s=1, i;
    while(b){
        if(b&1) s = s * a % mo;
        b /= 2, a = a * a % mo;
    }
    return s;
}//除法取模,转化成乘以除数的逆元
int dfs(int n){
    if(n < 1) return 0;
    if(f[n] != -1) return f[n];
    int s = 1ll * dfs(n-2) * m % mo * ni % mo;//m/100的概率到n-2
    s += dfs(n-1) * (100ll-m) % mo * ni % mo;//(100-m)/100的概率到n-1
    return f[n] = ++s%mo;//需要加1次操作
}
int main(){
//  printf("%d\n", 82854281300%mo);//检查逆元
//  return mi(100, mo-2);//预处理100的逆元
    scanf("%d%d", &n, &m);
    for(i=0; i<=n; i++) f[i] = -1;
    printf("%d\n", dfs(n));
    return 0;
}

作者 crxis

发表回复