简体   繁体   English

使用HashSet的独特素数

[英]Unique prime factors using HashSet

I wrote a method that recursively finds prime factors. 我写了一种可以递归找到主要因素的方法。 Originally, the method simply printed values. 最初,该方法只是打印值。 I am currently trying to add them to a HashSet to find the unique prime factors. 我目前正在尝试将它们添加到HashSet以查找唯一的主要因素。

In each of my original print statements, I added a primes.add() in order to add that particular integer into my set. 在每个原始打印语句中,我都添加了primes.add()以便将该特定整数添加到我的集合中。

My printed output remains the same, for example, if I put in the integer 24 , I get 2*2*2*3 . 我的打印输出保持不变,例如,如果我输入整数24 ,则得到2*2*2*3 However, as soon as I print the HashSet , the output is simply [2] . 但是,一旦我打印HashSet ,输出就是[2]

    public static Set<Integer> primeFactors(int n)
    {
        Set<Integer> primes = new HashSet<Integer>();

        if(n <= 1)
        {
            System.out.print(n);
            primes.add(n);
        }
        else
        {
            for(int factor = 2; factor <= n; factor++)
            {
                if(n % factor == 0)
                {
                    System.out.print(factor);
                    primes.add(factor);
                    if(factor < n)
                    {
                        System.out.print('*');
                        primeFactors(n/factor);
                    }
                    return primes;
                }
            }
        }
        return primes;
    }

I have tried debugging via putting print statements around every line, but was unable to figure out why my .add() was not adding some values into my HashSet . 我已经尝试通过在每行上放置打印语句来进行调试,但是无法弄清楚为什么我的.add()没有在HashSet添加一些值。

I seem to have fixed this by adding: 我似乎通过添加以下内容解决了此问题:

primes.addAll(primeFactors(n/factor));

Within my if-statement. 在我的if陈述中。

You could also reduce n. 您也可以减少n。 A bit faster. 快一点

        for (int factor = 2; factor <= n; factor++)
        {
            if (n % factor == 0)
            {
                System.out.print(factor);
                primes.add(factor);
                while (n % factor == 0)
                {
                     n /= factor;
                     System.out.print('*');
                     primeFactors(n/factor);
                }
            }
        }

If Set {2, 3} needs to be a List [2, 2, 2, 3] the add needs to be done in the while . 如果Set {2, 3}必须是列表[2, 2, 2, 3]则需要在while完成add

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM