出题人这句话理解好久,但是终于出来了,泪目.

本题需要求区间所有合数的最小公倍数,也就是需要统计区间内每个素数出现的最高的幂。

从第一个质数i开始找它的最大的一个幂j,使j的倍数出现在[l,r]内的值最大,这样的幂的积就是结果

#define ll long long
using namespace std;
const ll P=1000000007;
ll l,r,ans=1;
bool isPrime(ll a){
    if(a<2)return 0;
    for(int i=2;i*i<=a;++i)
        if(a%i==0)return 0;
    return 1;
}
int main(){
    scanf("%lld%lld",&l,&r);
    int f=0;
    for(ll i=2;i<=r;i++){
        if(i>=l&&f==0&&!isPrime(i))f=1;
        if(isPrime(i)){
            ll j=i;
            if(j*2>r)continue;
            while(r-(r%j)>=l)j*=i;
            j/=i;
            j%=P;
            ans*=j;
            ans%=P;
            //printf("%lld-%lld-%lld\n",i,j,ans);
        }
    }
    if(f)printf("%lld",ans);
    else printf("-1");
    return 0;
}