Вот что я хочу сделать. Я перечислил свой код ниже для справки. Заранее благодарим вас за любую помощь, которую вы можете предоставить.
Цель: найти простые факторизации числа n. Затем объедините простые множители в одно число x. Затем возьмите это число x и разделите на n. Если x%n = 0, выведите True. Если x%n != 0, выведите false. (т. е. если n = 100, простые множители равны 2,2,5,5. Превратите в 2255, затем возьмите 2255/100. 2255%100 != 0, выведите False. )
То, что у меня есть сейчас, правильно распечатывает простые множители для некоторых чисел, но когда я пытаюсь использовать другое простое число, программа завершает работу. Кроме того, если я использую число, например 123, будет напечатано только 3, а не 3 и 41. Есть ли у вас какие-либо предложения?
Если возможно, в идеале я хотел бы запустить это для чисел j = 2 через любую верхнюю границу, которую я установил, назвать верхнюю границу U, и если любое значение для j = 2 через U дает истинный результат (сверху). Тогда я хотел бы напечатать это значение j.
import acm.program.*;
import acm.util.*;
import java.util.Scanner;
import java.util.Arrays.*;
// -------------------------------------------------------------------------
public class FactorsLoop extends ConsoleProgram
{
//~ Instance/static variables .............................................
private RandomGenerator rgen = RandomGenerator.getInstance();
//~ Constructor ...........................................................
// ----------------------------------------------------------
/**
* Creates a new ForLoops object.
*/
public void run()
{
//
int n1 = 10000;
int n2 =(n1);
double U = 10000;
StringBuilder factors = new StringBuilder();
for (int j = 2; j < U; j++) {
for (int i = 2; i*i <= n1; i++) {
// if i is a factor of N, repeatedly divide it out
while (n1% i == 0) {
n1 = n1 / i;
factors.append(Integer.toString(i));
}
}
}
double newNumber = Integer.parseInt(factors.toString());
double x = (newNumber / n2);
print(x);
if ( newNumber % n2 == 0 ){
println(n2);
}
}
}