2016-03-26 3 views
0

Вот что я ищу. Я включил свой код ниже моей цели для вашей справки.Java Prime Factorization с дополнительной алгеброй

Цель: найти основные факторизации числа n. Затем объедините простые множители в одно число, x. Тогда Возьмите это число, x и разделите на n. Если x% n = 0, напечатайте True. Если x% n! = 0, напечатайте false. (т. е. если n = 100, Prime Factors - 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(); 
    } 
} 
+0

Итак, в чем проблема? Вы не указали настоящую проблему, с которой столкнулись. – HopefullyHelpful

ответ

0

Если у вас есть всеохватывающий для цикла, что существующий код идет в примерно так:

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 (newNumber % n == 0){ 
    System.out.println(n);  
} 

Это должно, по крайней мере помочь вам получить на вашем пути.

+0

Хорошо, так что я получил эту часть, все получилось. Спасибо за помощь! У меня теперь есть проблема с фактическим нахождением основных факторов. Когда я даю n = 100, это дает мне 2,2,5,5, что правильно. Если я допустим n = 123, то основные факторы равны 3,41, но это только дает мне 3. Любые предложения? Еще раз спасибо! –

+0

Да, я запускал ваш код на своей машине, когда создавал этот пост, и пока я не знаю точного источника проблемы, я обнаружил, что факторизация была правильна только для чисел, которые имели несколько одинаковых факторов, таких как 4 (2, 2) или 9 (3,3). Кроме того, если бы я помог, принятие моего решения - хороший способ для других пользователей получить больше пользы из этого сообщения. Благодаря! –

+0

Вы можете попробовать и грубо заставить его сначала заставить его работать, а затем отредактировать его, чтобы сделать его более элегантным, когда вы идете. –

0

Вы можете использовать сканер для ввода ввода, проанализировать его как целое. После этого вы можете просто напечатать (n) внутри цикла while.