2014-01-05 3 views
-1

Я написал программу для определения факторов заданного числа. Сначала нужно, конечно, проверить, является ли число простым числом. Это работает, но если число является квадрат числа она признает его как штрих ...Программа, распознающая квадратные числа как простые числа

public class factors { 
    public static void main (String [] args) { 
     System.out.println("Enter the number you need factors of"); 
     int base = Kon.readInt(); 
     for (int i = 2; i < base; i++) { 
      int a = base % i; 
      if (a == 0) { 
      break; 
      } 
      else { 
      System.out.println(base+" is a prime number, so it has no factors"); 
      break; 
      } 
     } 
     for (int i = 3; i < base; i++) { 
      int res = base % i; 
      if (res == 0) { 
       int fac = base/i; 
       System.out.println(i+" and "+fac+" are factors of "+base); 
      } 
     } 
    } 
} 

Так что, если я вхожу 64, он говорит, что это простой, но потом говорит мне, что 8 и 8 являются факторами 64 в следующей строке

Кто-нибудь знает, в чем проблема?

+0

Это не говорит 64 является простым для меня. Тем не менее, он подходит для 9, поэтому см. Ответы ниже. –

+0

Возможный дубликат [Определение простых чисел Java] (http://stackoverflow.com/questions/18625793/determining-prime-numbers-java) и [Как определить число и определить, является ли его простым числом] (http://stackoverflow.com/questions/18947244/how-to-factor-a-number-and-determine-whether-its-a-prime-number) и [Хранение моего первичного генератора в массив] (http: // stackoverflow. com/questions/20020526/storing-my-prime-generator-in-an-array) –

ответ

0

Проблема заключается в том, что вы печатаете это простое число в вашего цикла, так что вы претендуете число является как только есть как минимум один значение i, для которого base%i is 0.

Вы должны проверить, есть ли нет значение i, для которого это правда. Можно, например, сделать это:

boolean hasFactor = false; 
for (int i=2;i<base;i++) { 
    int a=base%i; 
    if (a==0) { 
     hasFactor = true; 
     break; 
    } 
} 
if (!hasFactor){ 
    System.out.println(base+" is a prime number, so it has no factors"); 
} 
0

Проблема заключается в том, что

if (a==0) { 
    break; 
} else { 
    System.out.println(base+" is a prime number, so it has no factors"); 
    break; 
} 

Выведет, что число не является простым момент она не делится на i независимо от того, что еще, так что вы должны сначала корыта цикла он полностью, прежде чем решить, что это не простой ,

Так что вы хотите изменить:

for (int i=2;i<base;i++) { 
     int a=base%i; 
     if (a==0) { 
     break; 
     } 
     else { 
     System.out.println(base+" is a prime number, so it has no factors"); 
     break; 
     } // end of if-else 
    } 

в:

prime = true; 
    for (int i=2;i<base;i++) { 
     int a=base%i; 
     if (a==0) { 
     prime = false; 
     break; 
     } 
    } 
     if (prime){ 
     System.out.println(base+" is a prime number, so it has no factors"); 
     } // not a prime 
+0

Это не скомпилируется. Проверьте свой код. –

+0

Это должно исправить это тогда ... – Thijser

0
if (a == 0) { 
    break; 
} 
else { 
    System.out.println(base+" is a prime number, so it has no factors"); 
    break; 
} 

Независимо от того, вы нарушаете из петли на первый шаг. Даже если вы удалили break; из блока else, вы по-прежнему показываете, является ли это число слишком ранним. Вам нужно решить, что после все итерации завершены.

Итак, рассмотрим boolean переменную для отслеживания, имеет ли число по меньшей мере, один фактор в нем:

boolean isPrime = true; // true unless proven otherwise 
for (int i = 2; i < base; i++) { 
    int a = base % i; 

    if (a == 0) { 
     isPrime = false; // has factor so it's not prime 
     break; 
    } 
} 

if (isPrime) { 
    System.out.println(base + " is a prime number, so it has no factors"); 
} else { 
    System.out.println(base + " is a composite number: "); // say it's not prime 

    // then display the factors 
    for (int i = 3; i < base; i++) { 
     int res = base % i; 
     if (res == 0) { 
      int fac = base/i; 
      System.out.println(i + " and " + fac + " are factors of " + base); 
     } 
    } 
} 

Here is a pastie to this entire class.

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