簡體   English   中英

使用HashSet的獨特素數

[英]Unique prime factors using HashSet

我寫了一種可以遞歸找到主要因素的方法。 最初,該方法只是打印值。 我目前正在嘗試將它們添加到HashSet以查找唯一的主要因素。

在每個原始打印語句中,我都添加了primes.add()以便將該特定整數添加到我的集合中。

我的打印輸出保持不變,例如,如果我輸入整數24 ,則得到2*2*2*3 但是,一旦我打印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;
    }

我已經嘗試通過在每行上放置打印語句來進行調試,但是無法弄清楚為什么我的.add()沒有在HashSet添加一些值。

我似乎通過添加以下內容解決了此問題:

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

在我的if陳述中。

您也可以減少n。 快一點

        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);
                }
            }
        }

如果Set {2, 3}必須是列表[2, 2, 2, 3]則需要在while完成add

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM