可以被1到100的所有数字整除的最小正数是多少?

时间:2016-09-10 15:26:09

标签: java biginteger lcm

以下是我的代码,我尝试使用BigInteger inn Java计算从1到100的所有数字的LCM。但它没有提供任何答案。

import java.math.BigInteger;

public class CommonOneToHundred {

    public static void main(String[] args) {
        // TODO Auto-generated method stub
        BigInteger res =new BigInteger("1");
        int i = 2;
        while(i<=100){
        res = lcm(res,BigInteger.valueOf(i));
        i++;
        }
        System.out.println(res);
    }
       static BigInteger lcm(BigInteger x, BigInteger y)
        {
            BigInteger a;
            //a = (x > y) ? x : y; // a is greater number
            a = y;
            while(true)
            {
                if(a.divide(x).equals(0) &&  a.divide(y).equals(0))
                    return a;
                a = a.add(BigInteger.ONE);
            }   
        }

}

2 个答案:

答案 0 :(得分:5)

为什么不将所有素数的最高幂乘以100.这是我在python中的代码。

action

答案是primes = [2,3,5,7,11,13,17,19,23,29,31,37,41,43,47,53,59,61,67,71,73,79,83,89,97] ans = 1 for prime in primes: power = 0 tmp = 1 while tmp <= 100: tmp = tmp*prime power += 1 ans = ans * prime**(power-1) print ans

答案 1 :(得分:0)

累积使用LCM从1到100将花费很长时间,即使它没有溢出BigInteger数据类型。尝试不同的算法。首先准备一个素数表2,3,5,7,...,97,然后对从1到100的每个数字进行素数分解,并找到所有100个数中每个素数的最高幂。最后,使用BigInteger类型乘以素数因子的幂。答案是2 ^ 6 * 3 ^ 4 * 5 ^ 2 * 7 ^ 2 *所有素数从11到97 = 69720375229712477164533808935312303556800。实际上,可以保存素数因子分解步骤。人们可以找到每个素数的最高功率,而不是100。 BigInteger乘法无法避免,因为数字超过long long