NC230694. Antinomy与取模
描述
Antinomy非常喜欢数论,他决定出 道题考考Pi。
现在Antinomy给定 个询问,第 个询问有四个整数:
对于每个询问,Pi需要找出满足以下三个条件的最小的整数(若不存在则输出-1)
输入描述
第一行一个整数—表示行数据接下来的t行里,每行都有四个整数,第i行的四个整数
输出描述
输出 行,第 行只有一个整数 来表示答案,如果不存在答案则输出-1
示例1
输入:
3 2 4 1 100 24 128 1 200 1 2 1 2
输出:
4 -1 2
说明:
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