题目大意
现在有两个数 \(n\) 和 \(m\),请问你是否可以构造出一个数 \(x\),使得 \(m\le x\),并且让 \(x=a\times b\left(1\le a,b\le n\right)\)。
思路
我们可以枚举数 \(a\),判断是否可以使得 \(a\times b=x\)。但是我们可以发现,这样是错误的,因为 \(1\le n,m\le 10^{12}\),并且答案也会错误,我们考虑每次让枚举的 \(a\le b\),不让其重复即可。
Code
#include<bits/stdc++.h>
using namespace std;
#define int long long
inline int read(){
int s=0,w=1;
char ch=getchar();
while(ch<'0'||ch>'9'){
if(ch=='-')w=-1;ch=getchar();
}
while(ch>='0'&&ch<='9'){
s=s*10+ch-'0';
ch=getchar();
}
return s*w;
}
inline void write(int x){
if(x<0){
putchar('-');
x=-x;
}
if(x>9)write(x/10);
putchar(x % 10 + '0');
}
int n,m;
signed main(){
n=read(),m=read();
if(ceil(sqrt(m))>n){
puts("-1");
return 0;
}else{
int ans=LONG_LONG_MAX;
for(int i=1;i<=n;++i){
int cnt=m/i;
if(m%i!=0)cnt++;
if(i>cnt)break;
if(i*cnt>=m && cnt<=n){
ans=min(ans,i*cnt);
}
}
write(ans);
puts("");
}
return 0;
}
标签:10,ch,int,long,read,le,abc296
From: https://www.cnblogs.com/shine0709/p/17984609