题目:
方法一:可执行代码:【直接找规律硬凑(尝试几遍凑规律:a*b-(a+b)】
cpp
#include <bits/stdc++.h>
using namespace std;
int main()
{
long long n=0,m=0;cin>>n>>m;
if(n==1 || m==1) cout<<1;
else if(n%m!=0 && m%n!=0) cout<<(n*m-(n+m));
else if(n%m==0) cout<<(n-1);
else if(m%n==0) cout<<(m-1);
// 请在此输入您的代码
return 0;
}
方法二:可执行代码:【使用动态规划找状态转移方程: if(dp[i-n] || dp[i-m]){ dp[i]=true;}】
cpp
#include<bits/stdc++.h>
using namespace std;
const int N=1e6+10;
bool dp[N];
int main(){
long long n=0,m=0,ans=0;cin>>n>>m;
dp[0]=true;
dp[n]=true;
dp[m]=true;
for(int i=0;i<=n*m;i++){
if(dp[i-n] || dp[i-m]){
dp[i]=true;
}
}
int max=0;
for(int i=0;i<=n*m;i++){
if(dp[i]==false && i>max) max=i;
}
cout<<max;
return 0;
}