2015-10-28 4 views
-1
public class PrimeFactor { 

public static void main(String[] args) { 
    Scanner input = new Scanner(System.in); 
    System.out.println("Enter the number:"); 
    int num=input.nextInt(); 
    int factors; 
    for(int i=1;i<num;i++) 
    { 
     factors=num%i; 
     if(factors==0 && isPrime(factors)) 
     System.out.println(i+""); 
    } 
    input.close(); 
} 
public static boolean isPrime(int n) 
{ 
    boolean prime=true; 
    for(int i=2;i<n;i++) 
    { 
     if(n%i==0) 
     { 
      prime=false; 
      break; 
     } 

    } 
    return prime; 
} 

} 

Я написал этот код, чтобы найти простые множители числа. Логика, которую я применил, кажется мне прекрасной, но результат идет не так.java-программа для поиска простых множителей числа

+8

Каким должен быть выход? Что это на самом деле? Что обнаружила ваша отладка? Почему вы так логично писали логику? Что он делает? Почему ты так думаешь? –

+0

Выход должен быть основным фактором, но он показывает все факторы, кроме 1 и самого себя. Нет причин, почему я написал логику таким образом, это только первое, что пришло мне в голову. @SotiriosDelimanolis – Tannia

ответ

1
for(int i=1;i<num;i++) 
    { 
     factors=num%i; 
     if(factors==0 && isPrime(factors)) 
     System.out.println(i+""); 
    } 
    input.close(); 

factors является остатком num/i. Итак, если factors возвращает 0, то вы передаете 0 вашему методу isPrime(), что не имеет смысла. Я думаю, вы, возможно, захотите пройти i до isPrime, а не factors.

Итак, ваша петля должна быть одной и той же, но с другим параметром, переданным функции isPrime().

for(int i=1;i<num;i++) 
    { 
     factors=num%i; 
     if(factors==0 && isPrime(i)) 
     System.out.println(i+""); 
    } 
    input.close(); 
+0

Большое спасибо. Я совершил такую ​​глупую ошибку. сожалею – Tannia

0

DanGordon прав, говоря, вы должны пройти i вместо factors к isPrime(). Это предотвращает вывод составных чисел, но это еще не устраняет проблему, что введенный номер не будет отображаться, даже если он является простым. Проблема в том, что ваш цикл for. i<num сообщает программе перебирать цикл for только до тех пор, пока i меньше введенного числа, поэтому один раз i равен num, он вырывается из цикла. Если вы измените i<num на i<=num, это будет гарантировать, что цикл будет выполняться, когда i равно введенному номеру, и поэтому он должен отображать введенный номер, если это число является простым.

Смежные вопросы