列表

详情


NC230694. Antinomy与取模

描述

Antinomy非常喜欢数论,他决定出 道题考考Pi。

现在Antinomy给定 个询问,第 个询问有四个整数:a_i,b_i,l_i,r_i

对于每个询问,Pi需要找出满足以下三个条件的最小的整数(若不存在则输出-1)


输入描述

第一行一个整数—表示行数据
接下来的t行里,每行都有四个整数,第i行的四个整数 a_i,b_i,l_i,r_i

输出描述

输出 行,第 行只有一个整数 来表示答案,如果不存在答案则输出-1

示例1

输入:

3
2 4 1 100
24 128 1 200
1 2 1 2

输出:

4
-1
2

说明:

样例1:4除以2的余数为0,4除以2的余数也为0
样例2:24和128的最小公倍数是384>200,输出-1

原站题解

上次编辑到这里,代码来自缓存 点击恢复默认模板

pypy3 解法, 执行用时: 1201ms, 内存消耗: 31552K, 提交时间: 2021-12-14 20:35:41

def gcd(a, b):
    return a if b == 0 else gcd(b, a % b)

for cas in range(int(input())):
    a, b, l, r = map(int, input().split())
    lcm = a * b // gcd(a, b)
    k = (l + lcm - 1) // lcm
    if k * lcm <= r:
        print(k * lcm)
    else:
        print(-1)

Python3 解法, 执行用时: 1643ms, 内存消耗: 8188K, 提交时间: 2022-11-21 22:55:48

def gcd(a, b):
    return a if b == 0 else gcd(b, a % b)

for cas in range(int(input())):
    a, b, l, r = map(int, input().split())
    lcm = a * b // gcd(a, b)
    k = (l + lcm - 1) // lcm
    if k * lcm <= r:
        print(k * lcm)
    else:
        print(-1)

C++ 解法, 执行用时: 453ms, 内存消耗: 1200K, 提交时间: 2022-04-30 09:16:00

#include<bits/stdc++.h>
using namespace std;
int main(){
    int t;cin>>t;
    while(t--){
        int64_t a,b,l,r;
        cin>>a>>b>>l>>r;
        auto lc=a*b/__gcd(a,b);
        auto x=(l+lc-1)/lc;
        x*=lc;
        cout<<(x<=r?x:-1)<<endl;
    }
}

Ruby 解法, 执行用时: 534ms, 内存消耗: 10280K, 提交时间: 2021-12-13 20:12:00

gets.to_i.times do 
	a, b, l, r = gets.split.map(&:to_i)
	ans = m = a.lcm b
	ans += m while ans < l
	ans = -1 if ans > r
	ans = 0 if l == 0
	puts ans
end

上一题