编写递归方法来查找传入的数字的质因子

Posted

技术标签:

【中文标题】编写递归方法来查找传入的数字的质因子【英文标题】:Writing a recursive method to find the prime factors of a number that is passed in 【发布时间】:2020-12-02 21:39:30 【问题描述】:

我必须编写一个递归方法来查找传入的数字的质因数。质因数应该以字符串形式返回,其中质因数用空格分隔,并从最小到最大排序,左对。如果传入的数字是素数,则应返回字符串“素数”。 我给程序以下输入

FindPrime p10 = new FindPrime(408);

我应该得到:2x2x2x3x17,但输出是:

2x2x2x3x4x4xprime number

这是我编写的程序

public class FindPrime
public int div = 2;

public FindPrime(int i) 
    System.out.println(i + " factorization:");
    findPrime(i);
    System.out.println();


public void findPrime(int num) 
    if(num == 1) 
        System.out.println("prime number");
        return;
    
    else if(num % div == 0) 
        System.out.print(div + "x");
        findPrime(num/div);
    
    else 
        div++;
        System.out.print(div + "x");
        findPrime(num/div);
        
           

有人可以帮忙吗?我不知道还能去哪里

【问题讨论】:

提示:在编写程序之前用英文写出你的算法。我无法判断您的算法是否正确,但您在实现中犯了错误,或者您认为的算法是否不正确。即使数字不能除以它(在最后一个 else 块中),您也会打印出“div”;这不可能。 【参考方案1】:

那是因为: 首先,在else语句中,为什么要分?(findPrime(num/div);) 其次,不知道if(num == 1)是什么意思 所以应该是这样的:

    public int div = 2;
    public void FindPrime(int i) 
        System.out.println(i + " factorization:");
        findPrime(i);
        System.out.println();
    

    public void findPrime(int num) 
        if(div == num) // it's the base case
            System.out.print(div);
        
        else if(num % div == 0) 
            System.out.print(div + "x");
            findPrime(num/div);
        
        else 
            div++;
            //System.out.print(div + "x");// Why are you sure that it's going to divide?
            findPrime(num);//you pass in the number, not divide then pass it in
            
               
    

【讨论】:

以上是关于编写递归方法来查找传入的数字的质因子的主要内容,如果未能解决你的问题,请参考以下文章

week8_1

NOI2015 寿司晚宴

CH 3101 - 阶乘分解 - [埃筛]

容斥原理——poj1091

输入一个正整数,按照从小到大的顺序输出它的所有质因子(如180的质因子为2 2 3 3 5 )

数学家的迷题(bitset+线段树)