蒜头君给了两个正整数 NN、MM,求一个最小的正整数 aa,使得 aa 和 (M-a)(M−a) 都是 NN 的因子(包括负因子)。
输入格式
包括两个整数 NN、MM。NN 不超过 1,000,0001,000,000。
输出格式
输出一个整数 aa,表示结果。如果某个案例中满足条件的正整数不存在,则在对应行输出 -1−1。
输出时每行末尾的多余空格,不影响答案正确性
样例输入复制
35 10
样例输出复制
5
题目还是很简单的,我们所要做的就是枚举从1->n,然后判断是否能被整除即可,可是这里有两个坑点,第一个坑点就是是否需要枚举到n,也就是 i 是否需要等于n,这里是需要的,假设一张特殊情况,也就是1*1=1;那么如果i不能枚举到1的话,那么循环就进不去,导致无法计算结果,第二个坑就是需要判断m-i是否等于0,如果m-i等于零,也进入不了循环,AC代码如下:
#include<iostream>
#include<map>
#include<cmath>
using namespace std;
typedef long long ll;
/*
@author:HaiRU,WU
@from:AHUT
*/
int main(){
ll n,m;
cin >> n>> m;
ll i;
bool flag=false;
for(i=1;i<=n;i++){
ll num=(m-i)>0?(m-i):(i-m);
if(num!=0 && n%i==0 && n%num==0 ){
cout<<i<<endl;
flag=true;
break;
}
}
if(flag==false){
cout<<-1<<endl;
}
return 0;
}
附上AC图