寻找能除尽1至n的每个数字的最小整数

需积分: 10 1 下载量 126 浏览量 更新于2024-01-17 收藏 155KB DOC 举报
软件设计大赛中C/C 本科组关于程序填空的一些典型题目收录: 11. 公倍数 为什么 1 小时有 60 分钟,而不是 100 分钟呢?这是历史上的习惯导致。但也并非纯粹的偶然:60 是个优秀的数字,它的因子比较多。事实上,它是 1 至 6 的每个数字的倍数。即 1,2,3,4,5,6 都是可以除尽 60。 我们希望寻找到能除尽 1 至 n 的的每个数字的最小整数。不要小看这个数字,它可能十分大,比如 n=100, 则该数为:69720375229712477164533808935312303556800。 为此,有必要使用 BigInteger 来记录这样的大数。请阅读下面的代码,填写缺失的部分(下划线部分)。注意:请把填空的答案(仅填空处的答案,不包括题面)存入考生文件夹下对应题号的“解答.txt”中即可。直接写在题面中不能得分。 ```java import java.math.BigInteger; public class My1{ // 求能除尽 1~n 每个数字的最小整数 public static BigInteger f(int n){ int[] x = new int[n + 1]; for(int i=1; i<=n; i++) x[i] = i; for(int i=2; i<=n; i++){ for(int j=2; j<x.length; j++){ if(x[j]%i == 0){ int tmp = x[j]/i; int p = i; while(tmp%i == 0){ tmp /= i; p *= i; } x[j] = p; } } } BigInteger result = new BigInteger("1"); for(int i=2; i<x.length; i++){ result = result.multiply(BigInteger.valueOf(x[i])); } return result; } } ``` 以上代码中,首先定义了一个长度为 n+1 的数组 x,然后依次将1至n的数字存入数组中。接着利用两个 for 循环对数组进行遍历,寻找每个数字的因子,并将数组中的数字进行更新,最后将数组中的数相乘得到最终结果。需要填写的部分在代码中已经用“…”表示了。