Mọi người cho em hỏi hướng giải của bài này với ạ:
Bài làm của em là như thế này ạ,nhưng chỉ đúng được 60% test thôi ạ:
include <bits/stdc++.h>
using namespace std;
long long i,j,a[100000001],max1,d[100000001],n,x[1000001],m,s,l,r;
void sang()
{
for (i=2;i<=max1;i++) a[i]=1; a[1]=0;
i=2;
while (i<=sqrt(max1))
{
if (a[i]) for (j=2;j<=max1/i;j++) a[i*j]=0;
i++;
}
for (j=2;j<=max1;j++)
if (a[j]) for (i=1;i<=n;i++) if (x[i]%j==0) d[j]++;
}
int main()
{
//freopen("SNT.inp","r",stdin);
//freopen("SNT.out","w",stdout);
cin>>n;
for (i=1;i<=n;i++) {cin>>x[i]; max1=max(max1,x[i]);}
cin>>m;
sang();
for (i=1;i<=m;i++)
{
s=0;
cin>>l>>r;
for (j=l;j<=r;j++) s+=d[j];
cout<<s<<endl;
}
}
Em cảm ơn ạ.