这题怎么做?
查看原帖
这题怎么做?
413362
奋斗吧!少女楼主2021/10/6 20:25

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);
    }
}
2021/10/6 20:25
加载中...