题意是给定两个数 \(a,b\),你可以进行一次操作,选定一个 \(b\) 的因数 \(k\),将 \(a\) 变为 \(a \times k\),并将 \(b\) 变为 \(b/k\),求出如何操作可以使得 \(a+b\) 是一个偶数,并且值最大,请输出这个最大值。
如果不考虑 \(a+b\) 是否为偶数,容易想到最大值为 \(a\times b+1\)。
接着考虑如何使 \(a+b\) 为偶数。
首先如果 \(a,b\) 均为奇数,答案必然为 \(a\times b+1\)。因为奇数的乘积必然还是奇数。
接着如果 \(b\) 为奇数,\(a\) 为偶数必然无解。因为无论如何操作都不可能让 \(b\) 变为偶数。
剩余情况由于 \(b\) 为偶数则必然可以进行一次操作,只需要判断乘积是否为4的倍数即可。
代码如下:
#include<bits/stdc++.h>
using namespace std;
int t;
long long a,b;
int main(){ios::sync_with_stdio(0);cin.tie(0);cout.tie(0);cin>>t;while(t--){cin>>a>>b;if(a%2&&b%2)cout<<a*b+1<<'\n';else if(a%2){long long k=a*b;if(k%4==0)cout<<k/2+2<<'\n';else cout<<"-1\n";}else{if(b%2)cout<<"-1\n";else cout<<a*b/2+2<<'\n';}}
}