小S特别喜欢数论,最近正在研究埃氏筛法。他发现在这个筛法的过程中,需要去枚举质数的倍数。根据唯一分解定理,任何合数都可以表示为若干质数的乘积形式,于是可以筛掉所有的合数,找出质数。
在这个过程中,他想要解决的一个子问题,就是如何找到第一个大于等于L且小于等于R的p的倍数。这个问题并不复杂,小S一会就想到了枚举的方法,但是他在想一个更难的问题。
如何找到在[L,R]范围内(包括端点)p的第k小的倍数?当然如果不存在这个数字,你应该告诉小S结果为-1。
例如:p=2,[10,20]的范围内 10,12,14,16,18,20都是p的倍数,第5小的倍数为18。
每个问题包括T组数据,每组数据包含四个正整数 L, R, p, k, 每个数字的含义由题目描述中所知。
输出一个正整数,表示在[L,R]范围内(包括端点),p的第k小的倍数。
若不存在,则输出一行“-1”(不包含双引号)。
3 10 20 2 5 1 100 3 10 80 82 3 2
18 30 -1
30%的数据保证,所有出现的数字,在1000范围内。
另外20%的数据保证,k=1。
100%的数据范围保证,T \leq 10^5 , 1 \leq L \leq 10^9 , 1 \leq R \leq 10^9 , 1 \leq p \leq 10^9 , 1 \leq k \leq 10^9
奇遇编程
2024年青岛市城阳区“区长杯”初中组第一题