У меня есть приведенная ниже 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
Тип возвращаемого значения — void, а не String. Очевидно, что вы скопировали/вставили эту домашнюю работу от кого-то другого :(
@Jason Логика на самом деле выглядит правильной. Предположение, что 100 является простым, неверно или опечатка, но ОП никогда не должен генерировать это.




Попробуйте просто сохранить состояние для самого последнего простого числа, обнаруженного циклом:
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);
}
Чувак. Нам нравится подталкивать людей к ответу, а не давать ему/ей такие простые вещи. Помогает им учиться, а не просто делать домашнее задание. - просто ваше описание было ИДЕАЛЬНЫМ!
@Steve Вы хотите сказать, что моя работа не - делать домашнее задание для всех? Хотел бы я, чтобы вы сказали мне это 5 лет назад, когда я начал вносить свой вклад.
Ха! Ну, на самом деле есть аргументы в обе стороны. Но руководители/владельцы сайта говорят, что хотели бы не просто делать за людей домашнюю работу, если это возможно. - Только сегодня я собрал эту замечательную маленькую реализацию, а затем один из больших парней закрыл вопрос, прежде чем я смог опубликовать свой ответ. Хотя вопрос был довольно узким и разумным, но @Hovercraft сказал мне, что это делает чью-то домашнюю работу за них. Парень дрался, говоря, что не делает домашнюю работу, а Ховеркрафт клялся, что делал. Это было весело ;) Ну ладно...
Возможно, вы захотите ввести переменную 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 желаемого числа.
Просто измените порядок циклов, т. е.
for(i = 100; i>1;i--). Когда вы найдете простое число,break;петля