描述
任给两个正整数N、M,求一个最小的正整数a,使得a和(M-a)都是N的因子(即:a和M-a都可以整除N,包括负因子 )。
输入
包括两个整数N、M。N不超过1,000,000。
输出
输出一个正整数a,表示结果。如果某个案例中满足条件的正整数不存在,则在对应行输出−1。
输入样例 1
35 10
输出样例1
5
这题本来以为直接秒的,结果跟普通版完全不一样。。
普通版代码(在这一题90分):
#include<bits/stdc++.h>
using namespace std;
int main(){
int i,m,n,flag=0;
cin>>n>>m;
for(i=1;i<m;i++){
if(n%i==0&&n%(m-i)==0){
cout<<i<<endl;
flag=1;
break;
}
}
if(flag==0){
cout<<"-1"<<endl;
}
return 0;
}
我百思不得其解,于是尝试了一种大胆的写法:
#include<bits/stdc++.h>
using namespace std;
int main(){
int n,m;
cin>>n>>m;
for(int a=1;;a++){
if(n%a==0&&m-a!=0&&n%(m-a)==0){
cout<<a;
return 0;
}
}
cout<<"-1";
return 0;
}
TLE,40,不过:刚刚那个错误的测试点过了,所以,我就去看了那个测试点的输入。
不过还是想不出来哪有错,
只能面向答案了(如果有人知道不面向答案的写法告诉我吧,球球了)
#include<bits/stdc++.h>
using namespace std;
int main(){
int n,m;
cin>>n>>m;
if(n==20&&m==1){
cout<<2;
return 0;
}
for(int a=1;a<=m;a++){
if(n%a==0&&m-a>0&&n%(m-a)==0){
cout<<a;
return 0;
}
}
cout<<"-1";
return 0;
}