带有附加代数的Java Prime分解

时间:2016-03-26 05:58:36

标签: java

这是我要做的。我已将我的代码包含在我的目标之下供您参考。

目标:查找数字n的Prime Factorizations。然后将素因子连接成一个数字x。然后取这个数字,x,然后除以n。如果x%n = 0,则打印True。如果x%n!= 0,则打印为false。 (即如果n = 100,则Prime因子为2,2,5,5。转为2255整数,然后取2255/100.2255%100!= 0,打印错误。)

我现在打印出来的“2 2 5 5”并正确打印出我投入的所有素数因素。

如果可能的话,理想情况下我想通过任意上限设置数字k = 2运行,调用上限U,如果k = 2到U的任何值产生的结果为真(从上面)然后我想打印那个k值。

 import acm.program.*;
import acm.util.*;
import java.util.Scanner;
// -------------------------------------------------------------------------

public class Factors extends ConsoleProgram
{
    //~ Instance/static variables .............................................
    private RandomGenerator rgen = RandomGenerator.getInstance();
    //~ Constructor ...........................................................
    // ----------------------------------------------------------
    /**
     * Creates a new ForLoops object.
     */
    public void run()
    {

        int n = 100;



        println("The prime factorization of " + n + " is: ");

        // for each potential factor i

        for (int i = 2; i*i <= n; i++) {

            // if i is a factor of N, repeatedly divide it out
            while (n % i == 0) {

                n = n / i;
                print(i+" "); 




                //print(i/n);


            }



        }


        // if biggest factor occurs only once, n > 1
        if (n > 1) println(n);
        else       println();
    }
}

2 个答案:

答案 0 :(得分:0)

您可以使用扫描仪接收输入,将其解析为整数。之后,您只需在while循环中打印(n)。

答案 1 :(得分:0)

如果你有一个过度的for循环,你的现有代码就像这样:

int U = 10; //or whatever your limit is

for (int j = 2; j < U; j++) {    

}

并且您通过使用将您的因子添加到的StringBuilder来合并您的算法以找到素因子:

StringBuilder factors = new StringBuilder();

您可以像这样添加您的因素:

for (int i = 2; i * i <= n; i++) {

    // if i is a factor of N, repeatedly divide it out
    while (n % i == 0) {
        n = n / i;
        factors.append(Integer.toString(i));
        print(i + " ");
    }
}

然后你可以像这样解析你的factors.toString:

int newNumber = Integer.parseInt(factors.toString);

哪个会给你你的号码(例如2255)。然后可以将其置于if-statment中,该if-statment表示“如果此数字可被n整除,则打印n”:

if ( newNumber % n == 0 ){
    System.out.println(n);    
}

这至少可以帮助你继续前进。