n+ m = A n × m= B 这样的 A 和 B 是奇异数。现在给你 T 组 A 和 B,每组都要计算这样满足这样条件的 n 和 m 有多少对?n 大于 m 或者 m 大于 n 或者 m 等于 n 都可以。
输入
1
5 6
输出
2
保证 1 ≤ A,B ≤ 1012,1 ≤ T ≤ 100。 我这样做超时
#include<bits/stdc++.h>
using namespace std;
long long T,a,b,i,dy,dr,s;
int main(){
scanf("%lld",&T);
while(T--){
scanf("%lld%lld",&a,&b);
if(b==1&&a!=2){
cout<<0;
return 0;
}
s=0;
if(a%2==1){
if(b%2==1){
for(i=1;i<=a/2;i+=2){
dy=i;dr=a-i;
if(dy*dr==b) s++;
}
}
else{
for(i=1;i<=a/2;i++){
dy=i;dr=a-i;
if(dy*dr==b) s++;
}
}
}
else{
if(b%2==1){
for(i=1;i<=a/2;i+=2){
dy=i;dr=a-i;
if(dy*dr==b) s++;
}
}
else{
for(i=2;i<=a/2;i+=2){
dy=i;dr=a-i;
if(dy*dr==b) s++;
}
}
}
// for(i=1;i<=a/2;i++){
// dy=i;dr=a-i;
//if(dy*dr==b) s++;
//}
printf("%lld\n",s*2);
}
}