带附加代数的Java素数分解

带附加代数的Java素数分解,java,Java,这就是我想要做的。我已将我的代码包含在我的目标下面,供您参考 目标:找到一个数n的素因子分解。然后将素因子连接成一个数字x。然后取这个数字x除以n。如果x%n=0,则打印为真。如果x%n!=0,打印错误。(即,如果n=100,素数因子为2,2,5,5。将其转换为整数2255,然后取2255/100。2255%100!=0,打印为False。) 我现在打印出了“2 2 5 5”,并正确地打印出了我输入的任何n的所有素数因子 如果可能的话,理想情况下,我希望通过我设置的任何上界对数字k=2运行这个函

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

目标:找到一个数n的素因子分解。然后将素因子连接成一个数字x。然后取这个数字x除以n。如果x%n=0,则打印为真。如果x%n!=0,打印错误。(即,如果n=100,素数因子为2,2,5,5。将其转换为整数2255,然后取2255/100。2255%100!=0,打印为False。)

我现在打印出了“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();
    }
}
导入acm.program.*;
导入acm.util.*;
导入java.util.Scanner;
// -------------------------------------------------------------------------
公共类因素扩展控制台程序
{
//~实例/静态变量。。。。。。。。。。。。。。。。。。。。。。。。。。。。。。。。。。。。。。。。。。。。。
private RandomGenerator rgen=RandomGenerator.getInstance();
//~z~建造师。。。。。。。。。。。。。。。。。。。。。。。。。。。。。。。。。。。。。。。。。。。。。。。。。。。。。。。。。。。
// ----------------------------------------------------------
/**
*创建新的ForLoops对象。
*/
公开募捐
{
int n=100;
println(“+n+”的素因式分解为:”);
//对于每个潜在因素i
对于(int i=2;i*i 1
如果(n>1)println(n);
else println();
}
}

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

如果您有一个覆盖for循环,您现有的代码会像这样进入该循环:

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

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

}
您可以这样使用它来添加您的因素:

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 + " ");
    }
}
这会给你一个数字(比如2255)。然后可以把它放在一个if语句中,上面写着“如果这个数字可以被n整除,那么就打印n”:


这至少能帮你上路。

好的,我把这部分都算出来了。谢谢你的帮助!我现在在实际寻找基本因子方面遇到了问题。当我让n=100时,它给我2,2,5,5,这是正确的。如果我让n=123,基本因子是3,41,但它只给我3。有什么建议吗?再次感谢!耶当我写这篇文章时,我在我的机器上运行了你的代码,虽然我不知道问题的确切来源,但我发现分解只适用于具有多个相同因子的数字,如4(2,2)或9(3,3)。另外,如果我帮忙的话,接受我的解决方案是其他用户从这篇文章中获得更多使用的好方法。谢谢!你可以尝试先强制它工作,然后编辑它,使它更优雅。那么你的问题是什么?你没有说明你遇到的真正问题。
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 + " ");
    }
}
int newNumber = Integer.parseInt(factors.toString);
if ( newNumber % n == 0 ){
    System.out.println(n);    
}