求求了!
调了一天了,还是只有10分,用自己的代码和题解对拍了好几组数据都没问题,不知道哪里错了QWQ
#include<bits/stdc++.h>
using namespace std;
long long n,m,a[2000001],cnt,ans,t[2000001],b[2000001],bb,q[2000001],cn;
int main(){
cin>>n>>m;
for(long long i=1;i<=n;i++){
cin>>a[i];
if(a[i]>10000) cnt++;
if(a[i]<=1000000){
t[a[i]]++;
if(t[a[i]]==1){
bb++,b[bb]=a[i];
if(a[i]<=10000) cn++;
}
}
}
sort(a+1,a+n+1);
sort(b+1,b+bb+1);
long long ii=1;
for(long long i=1;i<=1000000;i++){
q[i]=t[i]+q[i-1];
q[i]%=998244353;
}
for(long long i=1;i<=cn;i++){
for(long long j=1;j<=cn;j++){
ans+=((m/(b[i]*b[j]))*t[b[i]]*t[b[j]])%998244353;
ans%=998244353;
}
}
long long o;
ii=1;
for(long long i=n;i>=n-cnt+1;i--){
o=m/a[i];
for(long long j=1;j<=bb;j++){
if(b[j]>=sqrt(o)) break;
ans=(ans+(o/b[j])*t[b[j]]*2)%998244353;
}
for(long long j=1;j<=(long long)sqrt(o);j++){
if(o/j>10000&&o/(j+1)<=10000){
ans=(ans+j*(q[o/j]-q[10000])%998244353)%998244353;
ans=(ans+j*(q[10000]-q[o/(j+1)])*2)%998244353;
}
else if(o/j>10000) ans=(ans+j*(q[o/j]-q[o/(j+1)])%998244353)%998244353;
else ans=(ans+j*(q[o/j]-q[o/(j+1)])*2)%998244353;
}
}
cout<<ans%998244353;
return 0;
}