题目
给出一个二元组(A,B)
求出无序二元组(a,b) 使得(a|A,b|B)的组数
无序意思就是(a,b)和(b,a) 算一组.
输入描述:
第一行数据组数 T(1≤T≤10000)
接下来T行,每行两个正整数 A,B(1≤A,B≤10000)
输出描述:
共T行,每行一个结果
示例1
输入
1
4 6
输出
11
分析
比较显然的一道题,我们可以轻易知道答案是A因数个数*B因数个数-gcd(A,B)因数个数,所以暴力做就行了.
上代码
#include <bits/stdc++.h>
using namespace std;
int T,n,m,ans;
int gcd(int x,int y){
if(!y)
return x;
return gcd(y,x%y);
}
int cl(int x){
int anss=0;
for(int i=1;i*i<=x;i++){
if(x%i==0)
anss+=2;
if(i*i==x)
anss--;
}
return anss;
}
int main(){
scanf("%d",&T);
while(T--){
scanf("%d %d",&n,&m);
int a=gcd(n,m),ans1=cl(n),ans2=cl(m),ans3=cl(a);
printf("%d\n",ans1*ans2-(ans3-1)*ans3/2);
}
return 0;
}