Создайте программу которая находит и выводит все простые числа меньше 100 java
Этот урок на Java для начинающих заключается в написании Java-программы, которая принимает данные от пользователя, находит максимальное и минимальное число и выводит их на консоль.
Также есть другие 4 способа, которые с примерами кода даны ниже.
Мы можем использовать класс Scanner, добавленный в Java 1.5, для чтения пользовательского ввода с консоли. Сканеру нужен InputStream для чтения данных, и поскольку мы читаем с консоли, мы можем передать System.in, который является InputStream для консоли Eclipse, или командную строку в зависимости от того, что используется.
Этот класс также помогает преобразовать пользовательский ввод в требуемый тип данных, например если пользователь вводит числа, необходимо затем преобразовать их в тип данных int и сохранить их в переменной int. Можно использовать метод nextInt(), чтобы считать пользовательский ввод как Integer.
Точно так же можно использовать nextLine() для чтения ввода пользователя как String. Есть другие методы, доступные для чтения с плавающей точкой, двойного или логического значения из командной строки.
Как только получены оба числа, просто нужно использовать оператор отношения меньше и больше, чтобы найти наименьшее и наибольшее число.
После этого можно использовать Math.max(), чтобы узнать максимум двух чисел, он должен совпадать с предыдущим результатом.
В этой статье вы узнаете
Максимум и минимум на примере
Пример программы состоит из двух частей. В первой части мы принимаем данные от пользователя , используем if block и реляционный оператор, чтобы найти максимальное значение в Java, и далее используем метод Math.max() для той же цели.
Во второй части программы мы попросим пользователя ввести еще два числа, а затем мы используем if блок, чтобы вычислить меньшее из двух. После этого мы снова используем функцию Math.min() для вычисления минимального числа. Если наша программа правильная, то оба результата должны быть выведены одинаковыми.
Java программа для нахождения максимума и минимума чисел
Мы можем запустить эту программу из Eclipse IDE, просто скопировав код после создания проекта. Eclipse автоматически создаст исходный файл с тем же именем, что и открытый класс, и поместит его в нужный пакет. Кроме того, также можно запустить эту программу из командной строки, следуя приведенным здесь шагам.
Вывод:
введите 2 числа
10
11
Between 10 and 11, maximum number is 11
Maximum value of 10 and 11 using Math.max() is 11
Please enter two numbers to find minimum of two
45
32
Between 45 and 32, Minimum is 32
Maximum value of 45 and 32 using Math.min() is 32
Из массива int
В этом примере мы находим максимальные и минимальные значения элемента из массива int на Java.
Вывод:
Maximum Value is: 120
Minimum Value is: 2
Методы max и min
В пакете java.util.Collections есть методы max и min.
Используя цикл
Вносим в переменные min и max первый элемент из списка, запускаем цикл и сравниваем число на итерации с числом в переменных.
Если оно меньше, чем min, то присваиваем его min, иначе если больше, чем max — то это max.
С помощью Collections.sort взять первый и последний из списка
Средняя оценка / 5. Количество голосов:
Спасибо, помогите другим - напишите комментарий, добавьте информации к статье.
Очень важный вопрос в математике и безопасности говорит о том, является ли число простым или нет. Это очень полезно при шифровании пароля. В этом уроке вы узнаете, как найти простое число в простых случаях.
Тривиальные Случаи
Мы узнали, что числа простые, если у них есть только делители 1 и сам. Тривиально, мы можем проверить каждое целое число от 1 до самого себя (эксклюзивно) и проверить, делится ли оно равномерно.
Например, может возникнуть соблазн запустить этот алгоритм:
Сначала это не кажется плохим, но мы можем сделать это быстрее - намного быстрее. Предположим, что если 2 делит некоторое целое число n, то (n / 2) также делит n. Это говорит нам о том, что нам не нужно пробовать все целые числа от 2 до n. Теперь мы можем изменить наш алгоритм:
При более эффективном кодировании мы замечаем, что вам действительно нужно перейти только к квадратному корню из n, потому что если вы перечислите все факторы числа, квадратный корень всегда будет посередине (если это произойдет не быть целым числом, мы все еще в порядке, мы могли бы быть слишком приблизительными, но наш код все еще будет работать).
Наконец, мы знаем, что 2 - это «самое странное» простое число - оно оказывается единственным четным простым числом. Из-за этого нам нужно только проверить 2 отдельно, затем пройти нечетные числа до квадратного корня из n. В итоге наш код будет выглядеть так:
Как вы можете видеть, мы прошли путь от проверки каждого целого числа (до n, чтобы узнать, что число простое) до простой проверки половины целых чисел вплоть до квадратного корня (на самом деле, нечетных). Это огромное улучшение, особенно если учесть большие цифры.
Повторы
Допустим, вы пишете программу, в которой вас просят проверить, много ли чисел простое; не один раз Хотя наша программа, приведенная выше, оптимизирована для этого алгоритма, существует другой способ, специально подходящий для этой ситуации: Prime Sieve.
Вот основная идея:
- Предположим, что каждое целое число, большее или равное 2, простое.
- Начните с начала списка, если число простое, вычеркните все множители этого числа из списка. Они не простые.
- Переходите к следующему числу, если оно вычеркнуто, пропустите его - оно не простое. Если оно не вычеркнуто, оно должно быть простым, вычеркните его кратные.
- Повторение
Посмотрим, что это значит. Рассмотрим список:
2 простое . вычеркните это кратно. Наш список теперь выглядит так:
2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 .
Вы можете понять, почему 2 - единственное простое число. Делая это с помощью 3, мы вычеркиваем 6 (уже вычеркнуто), 9, 12 (уже вычеркнуто), 15 и т. Д. В конце концов, ваш список будет выглядеть так:
2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 .
А наши простые числа остались: (2,3,5,7,11,13,17,19,23,29, . ). В коде вы можете отслеживать этот список как массив. Это означает, что вы настроите «сито» через n чисел, но восполните его при повторном вызове функции, так как она вернет мгновенное значение, является ли число простым или нет. Вот как это будет выглядеть. Конечно, вы можете отредактировать это самостоятельно в соответствии со своими потребностями:
Всем хорошего дня!
Конечно перечислять все я не буду, достаточно просто заглянуть сюда.Уже довольно большой период времени я наблюдаю за развитием темы простых чисел. И мне все больше хочется называть эти числа не простыми, а гениальными. И это не просто мое желание. Достаточно вспомнить высказывания великих людей: «Простота — это то, что труднее всего на свете; это крайний предел опытности и последнее усилие гения.» Леонардо да Винчи; «Всё гениальное просто, и всё простое гениально.» Йозеф Геббельс.Хочется отметить, что простые числа занимают далеко не последнее место в криптографии.Существует множество алгоритмов нахождения простых чисел. Но описать их последовательность аналитически, найти закономерность, еще никому не удавалось. Давайте же посмотрим на числа и поищем среди них простые. Для определения любого простого числа нужно попробовать разделить это число на числа лежащие в диапазоне от 1 до проверяемого на простоту числа. С числами до 100 проблем не возникает и можно интуитивно сказать является ли число простым, попробуйте! Но как быть дальше? Первое что приходит в голову это калькулятор, а лучше компьютер. Однозначно нужна программа!Существующие методы на первый взгляд кажутся громоздкими и не прозрачными, сложными. И это понятно, ведь это лучшее что имеется на сегодня, они оптимизированы по возможности на максимум, прогнаны через сотни не худших голов планеты. Разбираться в готовом коде не хотелось. Для большей глубины понимания проблемы, хотелось пройти путь самостоятельно, как первопроходец. И я решил изобрести свой велосипед и написал немного на Java. Я знал, что некоторая реализация уже имеется в исходниках JDK, но не стал с ней знакомится.
Пишем алгоритм поиска простых чисел
Так я начал. Хочу сказать сразу, что я не гнался за супер производительность кода и о параллельности потоков не думал, мне хотелось чего-то простого пусть и не самого быстрого. После двух часов прокручивания различных схем, мне показалось, что это далеко не легкая задача. В один момент я даже подумал, что мне не хватает определенных навыков и знаний. Все мои попытки сводились к перебору чисел и проверки на делимость каждого числа на числа лежащие в соответственном диапазоне. При этом я пытался считать на сколько чисел мое данное число разделилось на цело, а на сколько дробно, потом сравнивал их с существующим количеством элементов в диапазоне. «Это число не делится ни на одно другое кроме себя и единицы»-крутилось у меня в голове. Все время я пытался сосчитать элементы на которые не делится текущее число. Что не приводило к нужному результату. Мне пришлось отложить задачу. Позже, одним вечером, беседуя со своей женой я осознал свою грубейшую ошибку. Все дело было в неправильном подходе к решению. «Просто сделай проверку на количество делителей, у простого числа их всегда будет только два и не больше» — подсказала мне любимая. Действительно у любого другого из числа из натуральных их будет больше. В тот же вечер был написан код.
Пока я не могу сказать на сколько алгоритм работает медленнее существующих. Конечно с увеличением количества цифр в числе, работа несколько замедляется. Возможно кому и пригодится. спасибо за внимание!
Можно сказать, мы потратили на изучение Java уже достаточно времени и вполне можем решать уже какие-либо интересные задачи. К одной из таких задач можно отнести, например, проверку - является ли введенное число простым? О простых числах и об алгоритмах нахождения простых чисел можно почитать здесь. Для тех, кто не хочет углубляться в теорию, скажем, что простое число, это натуральное число (т.е. употребляемое для счета предметов), которое делится на единицу и на самого себя.
На этом занятии мы разберем несколько важных аспектов программирования на Java:
- Метод main() и точка входа в программу;
- организация ввода данных с помощью аргументов программы в командной строке (здесь также вспомним про строковый и другие типы данных);
- операторы цикла;
- операторы сравнения в Java.
плюс - некоторые операторы, которые часто применяются программистами в работе:
- нахождение остатка от деления;
- оператор return и завершение программы.
Листинг 1. Проверка - является ли число простым (файл IsNumberIsSimple.java)
public class IsNumberIsSimple
public static void main ( String args [ ] ) <
int num = Integer . parseInt ( args [ 0 ] ) ;
for ( int i = 2 ; i < num ; i ++ ) <
if ( num % i == 0 ) <
System . out . println ( "This number is not simple. " ) ;
return ;
>
>
System . out . println ( "Very well! It's simple!" ) ;
>
>
Чтобы убедиться, что программа работает, необходимо скомпилировать ее командой
javac IsNumberIsSimple.java
и, внимание, запустить с аргументом - числом для проверки, например
java IsNumberIsSimple 7
Аргумент программы - это параметр, который в командной строке пишется после имени программы через пробел.
О компиляции и запуске программ на языке Java см. Занятие 3.
Давайте теперь разберем подробнее программу из Листинга 1. Нужно сказать, что она получилась достаточно компактной. В классе IsNumberIsSimple использован всего лишь один метод main(), и, думается, настало время поговорить об этом методе более подробно. Во многих языках программирования имеется метод (функция), определяющий так называемую "точку входа" в программу. Язык Java многое позаимствовал от языков C/C++, в том числе и название такой точки входа. Речь идет о том, что если Вы хотите, чтобы программа была выполнена операционной системой ( в нашем случае виртуальной машиной), необходимо снабдить ее исходный код методом main(). Для языка программирования Java это означает, что необходимо включить метод main() в основной класс программного модуля. (Если в этом абзаце ничего не понятно, см. Занятие 1, Занятие 8 или просто поверьте что код Листинга 1 будет работать, а ознакомление с этими понятиями оставьте "на потОм").
Фраза, заключенная в кавычки - "Да здравствует Java. " - типичный представитель строкового типа данных.
Далее, еще один новый термин - массив. Массив — это упорядоченный набор данных, идентифицируемых с помощью индексов. В простейшем случае массив имеет постоянную длину и хранит единицы данных одного и того же типа (подробнее см., например, в Википедии). В нашем случае, в метод main() передается массив строк под названием args. Что интересно, первый из элементов массива будет иметь индекс 0. Т.е. в ячейке памяти, отведенной под переменную с именем args[0] будет храниться первый и единственный параметр командной строки для нашей программы. Это и будет число для проверки (вспомните цель нашей программы - проверить является ли какое-то число простым).
В программе мы объявили всего лишь одну переменную:
тип этой переменной - int. Так в Java объявляются целочисленные переменные. Что такое целое число? Математическое определение целых чисел можно посмотреть здесь. Как видно, ряд натуральных чисел входит в состав целых. Так для чего нам понадобилась такая целочисленная переменная? Как уже было сказано, в метод main() передается строковый массив, а в первом его элементе - args[0] хранится первый параметр метода main() (число для проверки), который тоже является строкой, но со строками в программировании, к сожалению, нельзя выполнять математических операций, а они (точнее некоторые из них) нам обязательно понадобятся.
С помощью конструкции
мы преобразовали первый элемент строкового массива args к типу целочисленных переменных.
Идея нашей программы проста. Если ввести в программу в качестве аргумента число больше 2, программа будет перебирать все целые числа и проверять делится число, которое мы ввели на текущее. Перебор всех целых чисел, которые меньше аргумента нашей программы, достигается при помощи следующей конструкции (оператора) for:
В которой внутри круглых скобок код символом ";" разделен на три части - в первой определяется переменная i, уже знакомого нам целочисленного типа, и ей сразу же присваивается значение 2, во второй записывается условие, до выполнения которого будет выполняться третья часть оператора for - в нашем случае это увеличение переменной i на единицу. Увеличение переменной на единицу записывается с помощью еще одного "хитрого" оператора ++. Итак, пока условие, записанное во второй части кода в круглых скобках, не сработало, будет выполняться блок кода, заключенный в фигурные скобки. Такая конструкция в программировании называется циклом, а оператор for называется "оператором цикла".
Далее, в теле цикла for (в блоке кода, заключенного в фигурные скобки) с помощью оператора if, осуществляющего проверку условия
if ( num % i == 0 ) <System . out . println ( "This number is not simple. " ) ;
return ;
>
мы проверяем, делится ли исходное число (аргумент нашей программы - попавший в переменную num после присваивания) на текущее (переменная i) нацело (т.е. без остатка) с помощью оператора выделения остатка от деления "%". И, если делится, это означает что число не является простым, Далее программа прерывает свое выполнение с помощью оператора return. В данном случае оператор return вернет управление среде, вызвавшей метод main(), т.е. виртуальной машине Java и операционной системе.
Если же, перебрав все целые числа от 2 до num в цикле for мы не обнаружили ни одного случая деления без остатка, то, по определению, аргумент программы - целое число.
Задание для самостоятельного выполнения:
* доработайте программу так, чтобы она проверяла введенное число на условие "является ли оно составным?". Узнайте что такое составное число.
Читайте также: