这是我要做的。我已将我的代码包含在我的目标之下供您参考。
目标:查找数字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();
}
}
答案 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);
}
这至少可以帮助你继续前进。