2013-10-03 2 views
1

Я хотел бы иметь программу, которые показывают диапазон в определенном диапазоне и шоу «без каких-либо простых чисел» только один раз, если нет простых чисел в этом диапазоне, как 24 до 28.Java программа показывает простые числа

int count=0; 

for(prime = lowerLimit ;prime < upperLimit; prime++) 
{ 
    count=0;     
    for(divisor = 2; divisor <prime; divisor++) 

     { 
      if(prime % divisor== 0)        

         count++; 

    } 

if(count==0) 
System.out.println(prime); 
} 

if (count>0) 
System.out.println("nope"); 

У меня есть попытался установить

if (count>0) 
System.out.println("nope"); 

вне цикла, однако он также печатает, когда диапазон имеет простые числа. Как я могу справиться с этим?

+1

Вам не нужно запускать внутренний цикл до делителя nitgeek

ответ

2

Сохраните одну дополнительную переменную, например noOfPrime, которая будет подсчитывать количество простых чисел в диапазоне. И увеличьте на 1, если вы нашли какое-то простое, так что вне стороны цикла вы могли бы определить число простых чисел, а также любое простое число или нет.

int count = 0; 
int noOfPrime = 0; 
... 
for(prime = lowerLimit ;prime < upperLimit; prime++){ 
    ... 
    if(count==0){ 
     System.out.println(prime); 
     noOfPrime+=1; 
    } 
} 
if(noOfPrime >0) 
    System.out.println("no primes); 
0

Каждый раз, когда вы добираетесь до конца внешнего цикла и count по-прежнему 0, это означает, что вы нашли простое число. Так что если это случается даже один раз, то вы не собирается печатать «nope» в конце. Используйте переменную boolean, чтобы отслеживать, видели ли вы премьер. Поскольку это домашнее задание, я дам вам понять, как его использовать. Подсказка: объявите boolean выше обеих петель.

2

Прежде всего, ваш метод определения простых чисел ужасен. Он работает, но он очень медленный. Я бы предложил вам изучить сита, если вы хотите улучшить этот внутренний цикл.

Во-вторых, что именно вы пытаетесь подсчитать? Прямо сейчас ваша переменная count хранит количество делителей, количество которых имеет, а затем вы устанавливаете его на ноль, когда вы проверяете следующий номер. Как это будет рассказывать вам что-нибудь о том, сколько простых чисел у вас в определенном диапазоне? Вы можете просто сделать что-то вроде этого:

notPrime = false; 
for(prime = lowerLimit ;prime < upperLimit; prime++) 
{      
    for(divisor = 2; divisor <prime; divisor++) 
    { 
     if(prime % divisor== 0){ 
      notPrime = true; 
      break; 
    } 
    if(notPrime) 
     break; 
} 

if(notPrime) System.out.println("There's a prime"); 
+0

Вам не нужно запускать свой внутренний loop до divisor nitgeek

+0

Я просто скопировал его внутреннюю петлю. Если бы я действительно выполнял поиск простых чисел, я бы использовал сито, как я упомянул в первом абзаце. –

2

Можно спроектировать функцию, чтобы определить, является ли число простым что-то вроде:

//checks whether an int is prime or not. 

boolean isPrime(int n) { 
    //check if n is a multiple of 2 
    if (n%2==0) return false; 
    //if not, then just check the odds 
    for(int i=3;i*i<=n;i+=2) { 
     if(n%i==0) 
      return false; 
    } 
    return true; 
} 

и внутри для цикла, вы вызываете функцию к каждому элементу от интервала:

for(int i=lowerLimit;i<=upperLimit;i++){  
    if (!(isPrime(i))){ 
    System.out.println("nope"); 
    break; 
    } 
} 

Извините, если у меня есть синтаксический errr, я ответил с мобильного телефона.

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