#include<cstdio>
#include<iostream>
#include<cstring>
#include<algorithm>
#include<cmath>
#include<queue>
#include<vector>
using namespace std;
#define lc l,m,index<<1
#define rc m+1,r,index<<1|1
#define ll long long
#define inf 0x3f3f3f3f
#define N 100005
#define MOD 1000000007
int prime[N],sum;
struct Ys//约数
{
int num,len;
int ys[N];
int cnt[N];
}temp;
void get_prime()//素数筛选
{
int i,j,flag;
prime[0]=2;
sum=1;
for(i=3;i<=100000;i++)
{
flag=1;
for(j=0;j<sum&&prime[j]*prime[j]<=i;j++)
{
if(i%prime[j]==0)
{
flag=0;break;
}
}
if(flag)prime[sum++]=i;
}
}
void fj(int num)//分解质因数
{
temp.num=num;
temp.len=0;
int i;
for(i=0;i<sum&&prime[i]*prime[i]<=num;i++)
{
if(num%prime[i]==0)
{
temp.ys[temp.len]=prime[i];
temp.cnt[temp.len]=1;
num/=prime[i];
while(num%prime[i]==0)temp.cnt[temp.len]++,num/=prime[i];
temp.len++;
}
}
if(num!=1)
{
temp.ys[temp.len]=num;
temp.cnt[temp.len]=1;
temp.len++;
}
}
int main()
{
get_prime();
ll t,i,ans,g,l;
scanf("%lld",&t);
while(t--)
{
scanf("%lld%lld",&g,&l);
if(l%g!=0)ans=0;
else
{
ans=1;
l=l/g;
fj(l);
for(i=0;i<temp.len;i++)ans*=6*temp.cnt[i];
}
printf("%lld\n",ans);
}
return 0;
}
UESTC 1895(分解质因数)
最新推荐文章于 2021-05-19 16:19:06 发布