使用java编程,题目如下:小华是个聪明的孩子,对数学特别感兴趣。他偶然得到了两个正整数a和b,现在他拿任何一个数做如下运算y=(div(x,b)/mod(x,b))。其中div是整除运算,mod是取余运算,”/“是正常除法运算。小华认为,如果一个正整数x可以使得y也是一个正整数且在区间[1,a]内,就说x是一个“好数”。现在请你计算,所有“好数”的和是多少呢?由于答案会非常大,请输出答案模除1000000007后的值。 解答要求 时间限制:1000ms, 内存限制:100MB 输入: 两个正整数a,b(1<=a,b<=10000000)。 输出: 输出所有“好数”的和模除1000000007后的值。
时间: 2024-01-21 14:16:23 浏览: 145
以下是Java代码实现:
```
import java.util.*;
public class Main {
public static void main(String[] args) {
Scanner sc = new Scanner(System.in);
int a = sc.nextInt();
int b = sc.nextInt();
int mod = 1000000007;
long ans = 0;
for (int i = 1; i <= a; i++) {
long y = (long)i * b;
if (y > a) break;
long x = (long)b * (y / b + y % b);
if (x <= a) ans = (ans + x) % mod;
}
System.out.println(ans);
}
}
```
思路解析:
对于每个可能的“好数”x,我们都可以通过计算y=(div(x,b)/mod(x,b))来判断它是否合法。注意到y是正整数当且仅当x是b的倍数,即x=k*b(k为正整数)。因此我们只需要枚举k,然后计算x=k*b*(1+mod(k,b)),判断x是否在[1,a]区间内,如果是则将其加入答案中。由于答案可能很大,我们需要对最终结果取模。
阅读全文