提问者:小点点

Java 素数分解与附加代数


这就是我要做的。我在目标下方包含我的代码供您参考。

目标: 查找数字 n 的素数分解。然后将质因数连接成一个数字 x。然后取这个数字 x 并除以 n。如果 x%n = 0,则打印 True。如果 x%n != 0,则打印 false。(即,如果 n = 100,质因数为 2,2,5,5。变成整数 2255,然后取 2255/100。22550 != 0,打印假。)

我现在打印出“2 2 5 5”,并正确打印出我输入的任何 n 的所有素因数。

如果可能的话,理想情况下,我想通过我设置的任何上限对数字 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个答案

匿名用户

如果你有一个总体的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 语句中,上面写着“如果这个数字能被 n 整除,则打印 n”:

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

这至少应该可以帮助您上路。

匿名用户

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