Изменение типа возврата, а также последнего печатаемого числа

У меня есть приведенная ниже Java-программа, которая печатает все простые числа до 100, теперь я хочу изменить то же самое, чтобы пользователь ввел число, и он будет печатать не диапазон, а самое последнее простое число, существующее в этом диапазоне, пожалуйста, сообщите, как чтобы изменить приведенную ниже программу, я также хочу изменить тип возвращаемого значения со строки на int, который

 class PrimeNumbers
 {
   public static void main (String[] args)
   {        
       int i =0;
       int num =0;
       //Empty String
       String  primeNumbers = "";

       for (i = 1; i <= 100; i++)         
       {              
          int counter=0;      
          for(num =i; num>=1; num--)
      {
             if (i%num==0)
         {
        counter = counter + 1;
         }
      }
      if (counter ==2)
      {
         //Appended the Prime number to the String
         primeNumbers = primeNumbers + i + " ";
      } 
       }    
       System.out.println("Prime numbers from 1 to 100 are :");
       System.out.println(primeNumbers);
   }
}

прямо сейчас выход

Prime numbers from 1 to 100 are :
2 3 5 7 11 13 17 19 23 29 31 37 41 43 47 53 59 61 67 71 73 79 83 89 97

и я хочу, чтобы печаталось только последнее простое число

100

Просто измените порядок циклов, т. е. for(i = 100; i>1;i--). Когда вы найдете простое число, break; петля

Ricky Mo 27.03.2019 05:55

Тип возвращаемого значения — void, а не String. Очевидно, что вы скопировали/вставили эту домашнюю работу от кого-то другого :(

Svetlin Zarev 27.03.2019 05:55

@Jason Логика на самом деле выглядит правильной. Предположение, что 100 является простым, неверно или опечатка, но ОП никогда не должен генерировать это.

Tim Biegeleisen 27.03.2019 05:57
Пользовательский скаляр GraphQL
Пользовательский скаляр GraphQL
Листовые узлы системы типов GraphQL называются скалярами. Достигнув скалярного типа, невозможно спуститься дальше по иерархии типов. Скалярный тип...
Как вычислять биты и понимать побитовые операторы в Java - объяснение с примерами
Как вычислять биты и понимать побитовые операторы в Java - объяснение с примерами
В компьютерном программировании биты играют важнейшую роль в представлении и манипулировании данными на двоичном уровне. Побитовые операции...
Поднятие тревоги для долго выполняющихся методов в Spring Boot
Поднятие тревоги для долго выполняющихся методов в Spring Boot
Приходилось ли вам сталкиваться с требованиями, в которых вас могли попросить поднять тревогу или выдать ошибку, когда метод Java занимает больше...
Полный курс Java для разработчиков веб-сайтов и приложений
Полный курс Java для разработчиков веб-сайтов и приложений
Получите сертификат Java Web и Application Developer, используя наш курс.
0
3
57
4

Ответы 4

Попробуйте просто сохранить состояние для самого последнего простого числа, обнаруженного циклом:

public static void main (String[] args) {
    int i = 0;
    int num = 0;
    int prime;

    for (i = 1; i <= 100; i++) {         
        int counter = 0;      
        for (num = i; num >= 1; num--) {
             if (i % num == 0) {
                 counter = counter + 1;
             }
        }
        if (counter == 2) {
            prime = i;
        } 
    }    

    System.out.println("Last prime number from 1 to 100 is: " + prime);
}

Чувак. Нам нравится подталкивать людей к ответу, а не давать ему/ей такие простые вещи. Помогает им учиться, а не просто делать домашнее задание. - просто ваше описание было ИДЕАЛЬНЫМ!

CryptoFool 27.03.2019 05:56

@Steve Вы хотите сказать, что моя работа не - делать домашнее задание для всех? Хотел бы я, чтобы вы сказали мне это 5 лет назад, когда я начал вносить свой вклад.

Tim Biegeleisen 27.03.2019 05:58

Ха! Ну, на самом деле есть аргументы в обе стороны. Но руководители/владельцы сайта говорят, что хотели бы не просто делать за людей домашнюю работу, если это возможно. - Только сегодня я собрал эту замечательную маленькую реализацию, а затем один из больших парней закрыл вопрос, прежде чем я смог опубликовать свой ответ. Хотя вопрос был довольно узким и разумным, но @Hovercraft сказал мне, что это делает чью-то домашнюю работу за них. Парень дрался, говоря, что не делает домашнюю работу, а Ховеркрафт клялся, что делал. Это было весело ;) Ну ладно...

CryptoFool 27.03.2019 05:58

Возможно, вы захотите ввести переменную int (int primeNumber), которая будет хранить значение наибольшего простого числа. Внесены небольшие изменения в код задачи:

int i = 0;
int num = 0;
//Empty String
int primeNumber = 0;

for (i = 1; i <= 100; i++) {        
    int counter=0;      
    for(num =i; num>=1; num--) {
        if (i%num==0) {
            counter = counter + 1;
        }
    }
    if (counter ==2) {
        primeNumber =  i;
    } 
}    
System.out.println("Largest Prime number from 1 to 100 is : ");
System.out.println(primeNumber);

Насколько я понимаю, вы хотите напечатать максимальное простое число, которое близко к 100.

 class PrimeNumbers
{
   public static void main (String[] args)
   {        
   int i =0;
   int num =0;
   //Empty String
   String  primeNumbers = "";

   for (i = 1; i <= 100; i++)         
   {              
      int counter=0;      
      for(num =i; num>=1; num--)
   {
         if (i%num==0)
     {
    counter = counter + 1;
     }
  }
  if (counter ==2)
  {
     //Appended the Prime number to the String
     primeNumbers =  i+ "";
  } 
   }    
   System.out.println("Max prime number between 1 to 100 is:");
   System.out.println(primeNumbers);
  }
}

ОБНОВИТЬ :

Эта программа может быть дополнительно оптимизирована для импровизации временной сложности.

public class  PrimeNumbers{

 public static void main (String[] args)
{        
int i =0;
int num =0;

int  primeNumbers = 0;

for (i = 100; i >= 1; i--)         
{              
  int counter=0;      
  for(num =i; num>=1; num--)
{
     if (i%num==0)
 {
  counter = counter + 1;
 }
}
if (counter ==2)
 {
  primeNumbers =  i;
  break;
 } 
}    
 System.out.println("Max prime number between 1 to 100 is:");
 System.out.println(primeNumbers);
}
}

Предлагаемые исходные коды можно записать более структурировано:

public class PrimeNumbers {
    private static boolean isPrime(int n) {
        if (n == 2) return true;
        if (n % 2 == 0) return false;
        for (int i = 3; i <= Math.sqrt(n); i = i + 2)
            if (n % i == 0) return false;
        return true;
    }

    public static void main(String[] args) {
        int biggestPrimeNumber = 0;
        String primeNumbers = "";
        for (int n = 2; n <= 100; n++)
            if (isPrime(n)) {
                biggestPrimeNumber = n;
                //Appended the Prime number to the String
                primeNumbers += n + " ";
            }
        System.out.println("Prime numbers from 1 to 100 are: " + primeNumbers);
        System.out.println("Last prime number from 1 to 100 is: " + biggestPrimeNumber);
    }
}

Для проверки простоты числа существует множество алгоритмов, таких как Критерий простоты Миллера – Рабина, но простой способ грубой силы — это проверить числа до sqrt желаемого числа.

Другие вопросы по теме