Создайте программу которая находит и выводит все простые числа меньше 100
Натуральное число, большее 1 , называется простым, если оно ни на что не делится, кроме себя и 1 .
Другими словами, n > 1 – простое, если при его делении на любое число кроме 1 и n есть остаток.
Например, 5 это простое число, оно не может быть разделено без остатка на 2 , 3 и 4 .
Напишите код, который выводит все простые числа из интервала от 2 до n .
Для n = 10 результат должен быть 2,3,5,7 .
P.S. Код также должен легко модифицироваться для любых других интервалов.
Существует множество алгоритмов решения этой задачи.
Давайте воспользуемся вложенными циклами:
Для всех i от 1 до 10
Решение с использованием метки:
Напишите программу, которая находила бы все простые числа в диапазоне от 2 до 100
В книге Герберта Шилдта приводится такой пример решения задачи.
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15
public class Main { public static void main(String[] args) { int i,j; boolean isprime; for (i=2;i100;i++){ isprime=true; for(j=2;j=i/j;j++) if ((i%j)==0) isprime=false; if(isprime) System.out.println(i+"-простое число"); } } }
В чём смысл условия (j <=i/j) и почему при i=2 код выдаёт, что 2 - это простое число ведь в коде написано, что if ((i%j)==0)
isprime=false; ?=i>
Лучшие ответы ( 1 )
94731 / 64177 / 26122
Регистрация: 12.04.2006
Сообщений: 116,782
Ответы с готовыми решениями:
Напишите программу, которая вводит натуральные числа a и b и выводит все простые числа в диапазоне от a до b
Напишите программу, которая вводит натуральные числа a и b и выводит все простые числа в диапазоне.
Напишите программу, которая выводит все простые числа в диапазоне от 2 до N ( N заранее неизвестно)
Не проходит два теста по времени. Что можно предпринять? def is_prime(n): if n % 2 == 0: .
Составьте программу, которая находит все простые числа в диапазоне от A до B
Составьте программу, которая находит все простые числа в диапазоне от A до B.
Напишите программу, которая выводит все простые числа, меньшие данного натурального числа
Напишите программу, которая выводит все простые числа, меньшие данного натурального числа. .
205 / 181 / 112
Регистрация: 15.03.2014
Сообщений: 392
Сообщение было отмечено GenreralSergey как решение
Решение
GenreralSergey,
В чём смысл условия (j<=i/j)
j — является делителем предполагаемо простого числа i и при поиске простых чисел нет никакого смысла перебирать ВСЕ возможные делители. Есть смысл перебрать ТОЛЬКО те делители, которы НЕ превосходят корня квадратного из предполагаемо простого числа i.
Можно дополнить программу одной строкой — выводом рассматриваемых делителей j для каждого рассматриваемого числа i
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22
public class Main { public static void main( String[] args ) { int i, j; boolean isprime; for ( i = 2; i 100; i++ ) { isprime = true; for ( j = 2; j = i / j; j++ ) { System.out.println( i + " : " + j ); // вывод if ( ( i % j ) == 0 ) isprime = false; } if ( isprime ) System.out.println( i + "-простое число" ); } } }
Сообщение от GenreralSergey
почему при i=2 код выдаёт, что 2 — это простое число ведь в коде написано, что if ((i%j)==0)
isprime=false; ?
Потому что для 2, равно как и для 3 — внутренний цикл ни разу не выполнится и isprime останется true.
Обратите внимание что i / j является целочисленным делением, где в результате деления дробная часть вообще отсутствует.
Используйте пожалуйста теги форматирования кода — кнопка Java над полем ввода сообщения в теме.
Python 3. Циклы. Операторы while и for
Задача: Напишите программу, которая вводит два целых числа и находит их произведение, не используя операцию умножения. Учтите, что числа могут быть отрицательными.
a, b = map(int, input().split()) res, s = 0, 1 if bЗадача: Напишите программу, которая вводит натуральное число N и выводит первые N чётных натуральных чисел. Программа должна вывести в одну строчку N первых чётных натуральных чисел, разделив их пробелами.
n = int(input()) for i in range (1,2*n,2): print (i+1)Задача: Напишите программу, которая вводит натуральные числа a и b и выводит сумму квадратов натуральных чисел в диапазоне от a до b.
a, b = map(int, input().split()) if a > b: t = a a = b b = t s = 0 for i in range (a, b+1): s = s+i*i print (s)Задача: Напишите программу, которая вводит четыре натуральных числа (a, b, c и d) и находит все пятизначные числа, которые при делении на a дают в остатке b , а при делении на c дают в остатке d .
Входные данные Первая входная строка содержит два натуральных числа, разделённые пробелами: a и b. Вторая строка содержит натуральные числа c и d, также разделённые пробелом. Гарантируется, что 0 ≤ b ≤ a и 0 ≤ d ≤ c. Выходные данные Программа должна вывести в одну строчку через пробел все пятизначные натуральные числа, которые при делении на a дают в остатке b, а при делении на c дают в остатке d . Если таких чисел нет, программа должна вывести число -1.
x = input().split() y = input().split() a = int(x[0]) b = int(x[1]) c = int(y[0]) d = int(y[1]) if a==0 or c==0: print(-1) else: res = '' for i in range(10000, 99999): if (i%a == b) and (i%c == d): res = res+" "+str(i) res = res.strip() if res == '': print(-1) else: print(res)Задача: Натуральное число называется числом Армстронга, если сумма цифр числа, возведенных в K-ю степень (где K – количество цифр в числе) равна самому числу. Например:
153 = 1^3 + 5^3 + 3^3
Напишите программу, которая находит все числа Армстронга на отрезке [a, b].Входные данные: Входная строка содержит два натуральных числа – значения a и b, разделённых пробелами. Гарантируется, что a ≤ b.
Выходные данные: Программа должна вывести в одну строчку все числа Армстронга на отрезке [a, b] , разделив их пробелами. Если таких чисел нет, программа должна вывести число -1.
x = input().split() a = int(x[0]) b = int(x[1]) ''' a = 100 b = 400 ''' if a > b: t = a a = b b = t if aЗадача: Напишите программу, которая считает количество чётных цифр введённого числа.
n = int(input()) n = int(n) k = 0 m = 0 while n>0: if n%2==0: k+=1 else: m+=1 n=n//10 print(k)Задача: Напишите программу, которая определяет, верно ли, что введённое число содержит две одинаковых цифры, стоящие рядом (как, например, 221).
n = int(input()) res = "NO" d1 = 0 d2 = 0 while n > 0: d1 = n%10 d2 = n//10%10 if d1 == d2: res = "YES" n = n//10 print (res)Задача: Напишите программу, которая определяет, верно ли, что введённое число содержит по крайней мере две одинаковых цифры, возможно, не стоящие рядом (как, например, 212). Программа должна вывести слово 'YES', если в числе есть две одинаковые цифры, и слово 'NO', если такой пары цифр нет.
n = int(input()) res = "NO" d1 = 0 d2 = 0 while n>0: d1 = n%10 m = n//10 while m > 0: d2 = m%10 if d1 == d2: res = "YES" m = m//10 n = n//10 print (res)Задача: Модифицированный алгоритм Евклида для вычисления наибольшего общего делителя двух натуральных чисел, формулируется так: нужно заменять большее число на остаток от деления большего на меньшее до тех пор, пока остаток не станет равно нулю; тогда второе число и есть НОД. Напишите программу, которая реализует этот алгоритм.
Входные данные: Входная строка содержит два числа, разделённые пробелом – a и b .
Выходные данные: Программа должна вывести в одной строке два числа: сначала наибольший общий делитель двух введённых чисел, а затем – количество шагов цикла, которые были выполнены.
x = input().split() #Python 3.x a = int(x[0]) b = int(x[1]) n = 0 while a!=0 and b!=0: if a > b: a = a % b else: b = b % a n+=1 print (a+b, n)Задача: Напишите программу, которая вычисляет сумму и произведение целых чисел, поданных на её вход. Ввод заканчивается числом 0.
Входные данные: Во входных строках записаны целые числа, по одному в каждой строке. В последней строке записано число 0.
Выходные данные: Программа должна вывести в одной строке сумму и произведение введённых чисел (не считая завершающий 0), разделив их пробелом.
summ, mul = 0, 1 while 1: c = int(input()) if c == 0: break; summ += c mul *= c print (summ,mul)Задача: Напишите программу, которая вводит натуральное число N и определяет его факториал, то есть произведение натуральных чисел от 1 до N: N! = 1·2·<. >· N.
n = int(input()) f = 1 while n>1: f *= n n -= 1 print (f)Задача: Напишите программу, которая выводит на экран все цифры числа, начиная с первой.
Входные данные: Входная строка содержит натуральное число N.
Выходные данные: Программа должна вывести все цифры введённого числа в одной строке, начиная с первой. Цифры отделяются пробелами.
n = int(input()) res = "" while n>0: res = str(n%10)+ " " + res n = n//10 print (res.strip())Задача: Напишите программу, которая вводит натуральные числа a и b и выводит все простые числа в диапазоне от a до b. Входная строка содержит два натуральных числа: a и b. Гарантируется, что a ≤ b. Программа должна вывести в одной строке через пробел все простые числа на отрезке [a, b]. Если таких чисел нет, программа должна вывести 0.
x = input().split() a = int(x[0]) b = int(x[1]) if a == 0: a = 1 res = "" for i in range(a, b + 1): for j in range(2,i): if i%j == 0: break else: res = res + " " + str(i) if res != '': print (res) else: print (0)Помогите вывести простые числа в java
Помогите составить программу в JAVA которая принимает целое число, выводит на экран все простые числа от нуля до принятого числа. Используя только простые операции if и for Я составил, но что-то не помогает import java.util.Scanner;
public class prostue_chisla < public static void main(String[] args) < System.out.println("Введите положительное число: "); Scanner in = new Scanner(System.in); int input = in.nextInt(); boolean b = true; for (int P = 1; P System.out.println(P);> > > >
Отслеживать
задан 10 ноя 2017 в 19:34
59 1 1 золотой знак 2 2 серебряных знака 9 9 бронзовых знаков
Зачем вам переменная b ? Что конкретно в приведённом коде работает неправильно?
10 ноя 2017 в 19:45
Вот что оно выдает:Введите положительное число: 5 2 3 3 4 4 4 5 5 5 5
10 ноя 2017 в 20:447 ответов 7
Сортировка: Сброс на вариант по умолчанию
Если используете java 8+ , лучше юзать в вашем случае IntStream для целых чисел:
public static boolean isPrime(final int number) < return IntStream.rangeClosed(2, number / 2).anyMatch(i ->number % i == 0); >
System.out.println(isPrime(1)); // false System.out.println(isPrime(2)); // true
Отслеживать
ответ дан 23 мая 2018 в 6:28
4,086 4 4 золотых знака 13 13 серебряных знаков 29 29 бронзовых знаковpublic static void main(String[] args) < Scanner scanner = new Scanner(System.in); int top = scanner.nextInt(); for (int i=2;i
> public static boolean checkSimple(int i) < if (i<=1) return false; else if (i <=3) return true; else if (i%2==0 || i %3 ==0) return false; int n = 5; while (n*n <=i)< if (i % n ==0 || i % (n+2) == 0) return false; n=n+6; >return true; > Алгоритм проверки на то, что число является простым взял отсюда : https://en.wikipedia.org/wiki/Primality_test
Отслеживать
ответ дан 10 ноя 2017 в 19:49
aleshka-batman aleshka-batman
2,868 10 10 серебряных знаков 21 21 бронзовый знак
Что-то все равно не выходит
10 ноя 2017 в 20:42Проблема не со сканером, а с алгоритмом. Во-первых, он не оптимален, во-вторых, содержит ошибку. Но, если вы хотите искать простые числа именно таким способом, исправьте свой метод таким образом
public static void main(String[] args) < System.out.println("Введите положительное число: "); Scanner in = new Scanner(System.in); int input = in.nextInt(); boolean b = true; for (int P = 2; P > if (b) System.out.println(P); else b = true; > >
Отслеживать
ответ дан 10 ноя 2017 в 20:32
10.2k 2 2 золотых знака 11 11 серебряных знаков 26 26 бронзовых знаков
Вот что выдает: Введите положительное число: 5 2 3 3 4 4 4 5 5 5 5
10 ноя 2017 в 20:46
может вы что-то неправильно скопировали, потому как у меня выдает 5 1 2 3 5
10 ноя 2017 в 20:48
1 - не простое.
10 ноя 2017 в 20:50
Спасибо, но все скопировал правильно
10 ноя 2017 в 20:52
меняем р=1 на р=2 и все хорошо, 1 не выводится
10 ноя 2017 в 20:52//variable 'input' is input numeric for (int i = 2; i > if (rez != null) < System.out.println(rez); >>
Отслеживать
ответ дан 23 мая 2018 в 5:48
JavaJunior JavaJunior
1,538 6 6 серебряных знаков 16 16 бронзовых знаковПрограмма проверяет, числа от 11 и до бесконечности, и выводит количество простых чисел на экран + все простые числа + время работы программы. При желании можно отключить массив и выводить только количество простых чисел, что ускорит время работы программы процентов на 30. Без проблем можно запилить еще один метод, для проверки и вывода чисел до 10 и при помощи if проверять n
public class reshenie < public static void main(String[] args) < int count = 4;//начинаем с 4, т.к. до 10 нам известны все простые числа и программа их не обрабатывает. int n = 100000;//число до которого необходимо найти все простые числа ArrayListnumbers = new ArrayList<>();//создаем массив, необходим для вывода чисел на экран, можно и без массива, просто выводить каждое найденное простое число numbers.add(2);//добавляем в массив простые числа до 10(см count = 4) numbers.add(3); numbers.add(5); numbers.add(7); Date startTime = new Date();//время старта for (int i = 11; i > Date finishTime = new Date();//время окончания работы алгоритма long ct = finishTime.getTime() - startTime.getTime();//время работы System.out.println("Время вычислений: " + ct + "ms");//вывод на экран времени работы System.out.println("Количество простых чисел: " + count);//вывод количества System.out.print(numbers);//вывод всех чисел > static boolean simple(int a)/берем число i int p = 0;//переменная для определения результата if ((a % 2 == 0)||(a%10==5)) /исключаем числа, которые заканчиваются на 5 и четные return false; > else < for (int j = 3; j > > if (p > 0)/если p = 0, то возвращаем true, число простое return false; > else return true; > >