样例过不了。
#include<cstdio>
#include<cstring>
#include<algorithm>
using namespace std;
#define int long long
const int mod=998244353;
int n,A,B,C;
int dp[64][10][10][10][2][2][2][2][2][2];
/*
di 1 wei biao shi dang qian chu li dao na yi wei
di 2 wei biao shi xian zai x1%A de zhi
......
di 5 wei biao shi xian zai x1 shi fou qu dao neng qu de zui da zhi
1 biao shi yi qu dao zui da zhi
0 biao shi wei qu dao zui da zhi
......
di 8 wei biao shi xian zai x1 shi fou wei 0
1 biao shi x1=0
0 biao shi x1!=0
......
*/
int bin[64],cnt=0;
int dfs(int a,int b,int c,int d,int e,int f,int g,int h,int i,int j){
if (!a) return dp[a][b][c][d][e][f][g][h][i][j]=((!b)&&(!c)&&(!d)&&(!h)&&(!i)&&(!j));
if (dp[a][b][c][d][e][f][g][h][i][j]!=-1) return dp[a][b][c][d][e][f][g][h][i][j];
/*
x1 x2 x3
1. 0 0 0
2. 1 1 0
3. 1 0 1
4. 0 1 1
*/
/*1*/ int res=dfs(a-1,(b<<1)%A,(c<<1)%B,(d<<1)%C,e&!bin[a],f&!bin[a],g&!bin[a],h,i,j);
/*2*/ if ((e==0||bin[a]) && (f==0||bin[a])) res=(res+dfs(a-1,(b<<1|1)%A,(c<<1|1)%B,(d<<1)%C,e,f,g&&!bin[a],0,0,j))%mod;
/*3*/ if ((e==0||bin[a]) && (g==0||bin[a])) res=(res+dfs(a-1,(b<<1|1)%A,(c<<1)%B,(d<<1|1)%C,e,f&&!bin[a],g,0,i,0))%mod;
/*4*/ if ((f==0||bin[a]) && (g==0||bin[a])) res=(res+dfs(a-1,(b<<1)%A,(c<<1|1)%B,(d<<1|1)%C,e&&!bin[a],f,g,h,0,0))%mod;
return dp[a][b][c][d][e][f][g][h][i][j]=res;
}
signed main(){
scanf("%lld%lld%lld%lld",&n,&A,&B,&C);
while (n) bin[++cnt]=n&1,n>>=1;
memset(dp,-1,sizeof(dp));
printf("%lld\n",dfs(cnt,0,0,0,1,1,1,0,0,0)%mod);
return 0;
}
求助!!!