代码打印

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 条回复

2025-cpc-root

1