不含平方因子的数才会有 -1 和 1才会对结果造成影响,
所有排除掉所有含有平方因子的数就好
开始的时候平方是1 就是没有平方因子的情况,减去所有平方因子的情况
#include <bits/stdc++.h>
using namespace std;
const int maxn=10000001;
bool vis[maxn+10];
int prime[maxn+10],mu[maxn+10];
int cnt;
typedef long long ll;
const ll mod = 998244353;
int sum[maxn];
void Init(){
int N=maxn;
memset(prime,0,sizeof(prime));
memset(mu,0,sizeof(mu));
memset(vis,0,sizeof(vis));
mu[1] = 1;
cnt = 0;
for(int i=2; i<N; i++){
if(!vis[i]){
prime[cnt++] = i;
mu[i] = -1;
}
for(int j=0; j<cnt&&i*prime[j]<N; j++){
vis[i*prime[j]] = 1;
if(i%prime[j]) mu[i*prime[j]] = -mu[i];
else{
mu[i*prime[j]] = 0;
break;
}
}
}
sum[0]=0;
for(int i=1;i<N;i++)
sum[i]=sum[i-1]+mu[i];
}
int main()
{
ll n,m;
Init();
scanf("%lld%lld",&n,&m);
ll mii=min(n,m);
ll ans=0;
for(ll i=1;i*i<=mii;i++)
{
ll t1=n/(i*i);
ll t2=m/(i*i);
t1%=mod;
t2%=mod;
ans=(ans+(t1*t2*mu[i]+mod)%mod+mod)%mod;
}
printf("%lld\n",ans );
}