代码打印
2025-cpc-21
2025-05-18 15:36:25
2025-05-18 15:36:40
#include<iostream>
#include<cstdio>
#include<cstring>
#define int long long
using namespace std;
typedef long long ll;
const int MX=1010;
const int p=998244353;
int T, N, Q;
int ar[MX], num[MX];
int f[MX][35];
int read()
{
int r=0, f=1; char ch=getchar();
while(ch<'0'||ch>'9') {if(ch=='-') f=-1; ch=getchar();}
while(ch>='0'&&ch<='9') {r=r*10+ch-'0'; ch=getchar();}
return r*f;
}
signed main()
{
// freopen("testdata.in","r",stdin);
T=read();
while(T--)
{
N=read(); Q=read();
for(int i=1;i<=N;i++)
{
ar[i]=read();
int tmp=ar[i];
for(int j=2;j*j<=ar[i];j++)
{
if(tmp%j!=0) continue;
while(tmp%j==0) tmp/=j, num[i]++;
}
if(tmp!=1) num[i]++;
}
while(Q--)
{
int l=read(), r=read();
for(int i=l-1;i<=r;i++)
for(int j=0;j<32;j++)
f[i][j]=0;
f[l-1][1]=1;
for(int i=l;i<=r;i++)
{
for(int j=0;j<32;j++)
{
f[i][j^num[i]] = (f[i][j^num[i]] + f[i-1][j])%p;
f[i][j] = (f[i][j] + f[i-1][j])%p;
}
}
int ans=0;
for(int j=1;j<32;j++)
ans=(ans+f[r][j])%p;
cout << ((ans-ll(1))%p+p)%p << '\n';
}
for(int i=1;i<=N;i++) num[i]=0;
}
return (0-0);
}
共 1 条回复
1