#include<iostream>
#include<cstring>
#include<cstdio>
#include<cmath>
using namespace std;
typedef long long ll;
int a[25000];
int q[1000005];
ll num;
void makeprime(ll n)
{
// cout << "start " << n << endl;
for(ll i=2;i<=sqrt(n);i++)
{
if(n%i==0)
{
// cout << i << endl;
a[num++]=i;
while(n%i==0)
{
n/=i;
}
}
}
// cout << n << endl;
if(n!=1)
{
// cout << "ok"<< endl;
a[num++]=n;
}
// cout << num << endl;
}
ll solve(ll m)
{
ll s,t=0,ans=0;
q[t++]=-1;
for(ll i=0;i<num;i++)
{
s=t;
for(ll j=0;j<s;j++)
{
q[t++]=-1*q[j]*a[i];
}
}
for(ll i=1;i<t;i++)
{
// cout << q[i]<< endl;
ans+=(m/q[i]);
}
return ans;
}
int main()
{
int times;
scanf("%d",×);
while(times--)
{
ll n,m;
scanf("%lld%lld",&n,&m);
ll ans=0;
if(n>m)
{
ll tmp=n;
n=m;
m=tmp;
}
for(ll i=1;i<=n;i++)
{
num=0;
makeprime(i);
// cout << '*'<<num << endl;
ans+=(m-solve(m));
// cout << ans << endl;
}
printf("%lld\n",ans);
}
}
hdu 2841 容斥定理+思维
最新推荐文章于 2021-11-06 12:14:38 发布