Remainder Minimization 2019
单点时限: 1.0 sec
内存限制: 512 MB
给你一个区间[L,R],在这个区间内找到两个不同的数字i,j,使得(i∗j)%2019的值最小。
输入格式
输入两个数 L,R,(1≤L<R≤109)
输出格式
如题
样例
input
4 5
output
20
input
2020 2040
output
2
一开始想太多。。。直接暴力原来不会超时。。。
wa的代码:
#include<iostream>
#include<algorithm>
#include<cmath>
using namespace std;
int main(){
//cout<<sqrt(2019)<<endl;
long long int l,r;
cin>>l>>r;
if(r<45){
cout<<l*l+l<<endl;
}
else{
int min=2020;
if(l>2019){
l%=2019;
r%=2019;
if(r<l){
min=0;
}
}
if(r<45){
cout<<l*l+l<<endl;
}
else{
for(long long int i=l;i<=r;i++){
for(long long int j=i+1;j<=r;j++){
int s;
s=(i%2019)*(j%2019)%2019;
if(s<min){
min=s;
}
}
}
cout<<min<<endl;
}
}
return 0;
}
ac代码:
#include<iostream>
#include<algorithm>
#include<cmath>
using namespace std;
int main(){
//cout<<sqrt(2019)<<endl;
long long int l,r;
cin>>l>>r;
int min=2020;
if(r-l>=2019){
min=0;
}
else{
for(long long int i=l;i<=r;i++){
for(long long int j=i+1;j<=r;j++){
int s;
s=(i%2019)*(j%2019)%2019;
if(s<min){
min=s;
}
}
}
}
cout<<min<<endl;
return 0;
}