0 / 0 / 0
Регистрация: 15.04.2014
Сообщений: 90
1

Вывести на экран наименьшее простое число, которое больше чем заданное N

31.10.2015, 21:41. Показов 12170. Ответов 14
Метки нет (Все метки)

Author24 — интернет-сервис помощи студентам
задание, над которым мучаюсь не первый день. мозги кипят, путаюсь. может вы поможете, если не кодом, то хотя бы алгоритмом
надо осуществить с помощью цикла while:
Ввести с клавиатуры натуральное число N. Вывести на экран наименьшее простое число, которое больше чем N.
0
Лучшие ответы (1)
IT_Exp
Эксперт
34794 / 4073 / 2104
Регистрация: 17.06.2006
Сообщений: 32,602
Блог
31.10.2015, 21:41
Ответы с готовыми решениями:

Вывести на экран наименьшее простое число, которое больше чем N
Ввести с клавиатуры натуральное число N (N<1000). Вывести на экран наименьшее простое число, которое больше чем N. Стандартный ввод -...

Ввести с клавиатуры натуральное число N (N<1000). Вывести на экран наименьшее простое число, которое больше чем N
Буду очень благодарен если решите задачу. В задаче нельзя использовать массивы , другие классы. Можно использовать while , do while ,...

Вывести на экран наименьшее простое число из массива, которое больше X
1)Даны одномерный массив А неупорядоченных натуральных чисел и число X. Вывести на экран наименьшее простое число, которое больше X и...

14
 Аватар для HOBATOP
323 / 310 / 206
Регистрация: 14.09.2015
Сообщений: 827
31.10.2015, 22:52 2
Nikolas_555, теоретическая часть на Вики и реализация на С# Вывод всех простых чисел от 1 до N на консоль(N задаём в параметрах командной строки) Может сгодится?
0
 Аватар для hoot
101 / 22 / 7
Регистрация: 10.11.2010
Сообщений: 208
01.11.2015, 00:47 3
У меня вот так получилось.
Просьба к форумчанам дать свои комментарии по коду.
Java
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
package Project_1;
 
import java.io.BufferedReader;
import java.io.IOException;
import java.io.InputStreamReader;
 
public class Project_1 {
 
    public static void main(String[] args) throws IOException {
        // TODO Auto-generated method stub
         
         System.out.print("Enter a number:");
         BufferedReader red = new BufferedReader(new InputStreamReader(System.in));
          
         int N = Integer.parseInt(red.readLine());
         boolean res = true;
         int two = 0;
         int three = 0;
         
         while(res)
         {           
             two=N%2;
             three=N%3;          
             if(two==0 || three==0)
             {
                N=N+1;
             }
             else
             { 
                System.out.println("Prime number: "+N); 
                res=false;
             }
         }
    }
}
0
1 / 1 / 1
Регистрация: 22.07.2011
Сообщений: 43
01.11.2015, 02:01 4
hoot, забыл про пятерки.
1
 Аватар для hoot
101 / 22 / 7
Регистрация: 10.11.2010
Сообщений: 208
01.11.2015, 10:25 5
Действительно! Спасибо! Хотя есть плюс, в переписке этот момент отмечен,а лентяи не будут тупо копировать код для лаб. ;-)
0
0 / 0 / 0
Регистрация: 15.04.2014
Сообщений: 90
01.11.2015, 11:17  [ТС] 6
Nick16, hoot,
эм.. вы просто проверяете делимость на 2 и 3. допустим, ещё на 5 добавить. всё равно прога работать не будет, как надо. к примеру, число 999 введём. тогда выводит число 1001, а оно составное. следующее простое число - это 1009.
и ещё, в задании требуют следующее простое. то есть, если ввести простое, то его же выводить не следует. это поправка к вашему решению.
простым перебором первых простых чисел я уже пробовал, нужен другой способ. поэтому и написал на форум, ибо сам додуматься до решения не могу.

Java
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
import java.util.Scanner;
 
public class Solution
{
    public static void main(String[] args)
    {
        int n;
        Scanner in = new Scanner(System.in);
        n = in.nextInt();
        n++;
        while ((n%2==0)|(n%3==0)|(n%5==0)|(n%7==0))
        {
            n++;
        }
        System.out.println(n);
    }
}
мой фрагмент, похож на ваше решение. но это всё равно не верно. можно до бесконечности в while добавлять условие на делимость на простые числа. но необходимо как-то автоматизировать этот процесс.
0
1 / 1 / 1
Регистрация: 22.07.2011
Сообщений: 43
01.11.2015, 16:08 7
Ясно. Возможно я окажусь неправ, но может быть тогда попробовать создать массив из простых чисел (просто перебор всех значений до заданного n, для уверенности 2n) и потом увеличивая это n каждый раз искать в массиве такое же число, и при совпадении вывести его. Правда если числа будут гигантские то мне кажется времени будет много занимать.
0
0 / 0 / 0
Регистрация: 15.04.2014
Сообщений: 90
01.11.2015, 19:36  [ТС] 8
Nick16,
мне просто необходимо как-то автоматизировать замену i, на которое будет проверка деления.
0
 Аватар для HOBATOP
323 / 310 / 206
Регистрация: 14.09.2015
Сообщений: 827
01.11.2015, 21:09 9
Nikolas_555, я же давал ссылку на теоретическую часть. Ежели решето Эратосфена кажется сложным, то вот такой вариант может оказаться более приемлемым. Формула для отсева m = 2*j*i + j + i (при 1 < i < j), а числа 2m + 1 => простые. Можно будет задавать и диапазон поиска и циклы легко организовать. Как-то так... Почитайте теорию и сделаете "на раз". Удачи!
0
0 / 0 / 0
Регистрация: 15.04.2014
Сообщений: 90
01.11.2015, 22:15  [ТС] 10
HOBATOP,
вариант не плох, но что бы осуществить это решето, необходимо либо массив либо два цикла for применить (если не оба варианта сразу).
мне бы с помощью while это сделать, не прибегнув ни к массивам, ни к for'у.
0
53 / 53 / 39
Регистрация: 05.12.2010
Сообщений: 261
03.11.2015, 11:11 11
Делаешь бесконечный цикл вперед, вот проверка в java 8 числа на простоту:
Java
1
2
3
boolean isPrime(final int n) {
    return IntStream.range(2, n / 2+1).noneMatch(i -> n % i == 0);
}
Вот в старых версиях:
Java
1
2
3
4
5
6
7
8
9
int realNum = Integer.parseInt(insertNum);
    boolean prime = true;
    for (int i = 2; i <= realNum / 2; i++) {
         if (realNum % i == 0) {
              JOptionPane.showMessageDialog(null, "It is not a prime!!");
              prime = false;
              break;
         }
    }
Взято отсюда
0
0 / 0 / 0
Регистрация: 03.11.2017
Сообщений: 1
03.11.2017, 22:00 12
i
Java
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
mport java.util.Scanner;
 
public class work_35 {
 
    public static void main(String[] args) {
        Scanner in = new Scanner(System.in);
        int n=in.nextInt();
        int i=2;
        n++;
            while (i<n) {
                if(n%i==0) {
                    n++;
                    i=2;
                }
                else {
                    i++;
                }
            }
        System.out.print(n);
    }
}
0
Модератор
Эксперт PythonЭксперт JavaЭксперт CЭксперт С++
 Аватар для easybudda
12839 / 7579 / 1765
Регистрация: 25.07.2009
Сообщений: 13,970
04.11.2017, 01:57 13
Лучший ответ Сообщение было отмечено Catstail как решение

Решение

Java
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
import java.util.Scanner;
 
public class NextPrime {
    public static boolean isPrime(int n) {
        if ( ( n < 2 ) || ( ( n != 2 ) && ( ( n & 1 ) == 0 ) ) )
            return false;
        for ( int d = 3; d * d <= n; d += 2 )
            if ( n % d == 0 )
                return false;
        return true;
    }
    
    public static void main(String[] args) {
        Scanner scan = new Scanner(System.in);
        
        while ( true ) {
            System.out.print("Number: ");
            if ( ! scan.hasNextInt() )
                break;
            int n = scan.nextInt();
            for ( n += 1; ! isPrime(n); ++n )
                ;
            System.out.println("Next prime number: " + n);
        }
    }
}
Code
1
2
3
4
5
6
7
8
9
10
C:\prog\java\numbers>javac NextPrime.java
 
C:\prog\java\numbers>java NextPrime
Number: 999
Next prime number: 1009
Number: 13
Next prime number: 17
Number: q
 
C:\prog\java\numbers>
1
0 / 0 / 0
Регистрация: 23.01.2022
Сообщений: 2
23.01.2022, 20:55 14
Вот простой код без сложных и заморочных операторов, с подробными пояснениями к каждому шагу для новичков. Программу проверил, она работает без ошибок))
Java
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
import java.util.Locale;
import java.util.Scanner;
 
public class Main {
 
    public static void main(String[] args) {
        Scanner sc = new Scanner(System.in);
        sc.useLocale(Locale.US);
//Вводим переменные
       int n = sc.nextInt();
       int i, d;
//Создаем цикл и называем его "outer", чтобы потом применить ссылку
        outer: while (n > 0){
//n у нас растет (с шагом равным 1), чтобы если число изначально простое, оно не вывелось само, плюс чтобы если число не простое, нам выводилось следующее после него
            n++;
//i даем значение прямо в цикле, тк если ее поставить в начале, то при вводе 999 система выводит 1003, вместо нужных 1009
            i = 1;
//Создаем внутренний цикл, который будет проверять наше число на принадлежность к простым. Условие тут практически любое поставить можно, оно все равно не выполняется ни в какой ситуации. Главное, чтобы оно не перечило ходу цикла. Например, условие "i==1" не подойдет
            while (n+1 > i){
//i - растущая переменная. Так мы можем проверить делимость числа на все числа до него, не перечисляя их вручную 
                i++;
//Даем значение переменной d. Можно, конечно и без этой переменной, однако тогда придется в условии первого if писать: "n%i == 0"
                d = n % i;
//Ставим условие. Если число делится на i (когда i не равно этому числу), то оно по определению не является простым
                if (d == 0){
//Прерываем внутренний цикл, если число не является простым. Далее программа выберет следующее за ним число и начнет его проверять
                   break;
                }
//Если же число прошло проверку и программа его не выкинула, то выводим его, потому что это то, что нам нужно. (Если n не делится без остатка на число, которое меньше его на 1, то оно точно поделится на само себя, однако, если условие будет "n==i", то в первой части цикла у нас переменная d будет равна 0 и программа ее отбросит
                else if (n-1 == i){
                    System.out.print(n);
//Выходим из обоих циклов, как внутреннего, так и внешнего, так как число найдено
                    break outer;
                }
            }
        }
    }
}
Добавлено через 3 минуты
Если кто планирует просто скопировать программу, то вот. Все пояснения к действиям выложил ранее

Java
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
import java.util.Locale;
import java.util.Scanner;
 
public class Main {
 
    public static void main(String[] args) {
        Scanner sc = new Scanner(System.in);
        sc.useLocale(Locale.US);
        
       int n = sc.nextInt();
       int i, d;
        
        outer: while (n > 0){
            n++;
            i = 1;
        
            while (n+1 > i){
                i++;
                d = n % i;
                if (d == 0){
                   break;
                }
                else if (n-1 == i){
                    System.out.print(n);
                            break outer;
                }
            }
        }
    }
}
0
Эксперт PythonЭксперт Java
19520 / 11059 / 2931
Регистрация: 21.10.2017
Сообщений: 23,297
25.01.2022, 08:43 15
Цитата Сообщение от Pelmeshka_Soor Посмотреть сообщение
outer: while (n > 0){
фу
0
Надоела реклама? Зарегистрируйтесь и она исчезнет полностью.
BasicMan
Эксперт
29316 / 5623 / 2384
Регистрация: 17.02.2009
Сообщений: 30,364
Блог
25.01.2022, 08:43
Помогаю со студенческими работами здесь

Создать программу, которая найдет наименьшее число, который взаимное простое число с 60 и больше, чем введенное число
Создать программу, которая найдет наименьшее число, который взаимное простое число с 60 и больше, чем введенное число. например ...

Вывести на экран число, которое получается если прочитать заданное число в обратном порядке
Составить программу, которая выводит на экран число, получаемое, если прочитать заданное число в обратном порядке Пример: 123 321...

Найти и вывести на экран наименьшее натуральное число которое превращается в единицу за k ходов
Здравствуйте! Срочно надо программы написать! 2 За один ход с числом делается такая операция: если число не делится на 3, то...

Длинная арифметика: найти первое простое число, которое больше 10^11
здравствуйте, помогите пожалуйста:( Найти первое простое число, которое больше 10^11

Найти наименьшее возможное простое число P, больше либо равное заданному N
На вход программе подается натуральное число N, не превосходящее 10^9. Требуется найти наименьшее возможное простое число P, больше либо...


Искать еще темы с ответами

Или воспользуйтесь поиском по форуму:
15
Ответ Создать тему
Опции темы

Новые блоги и статьи
Сопоставление с образцом (Pattern Matching) в Python: Списки и словари
py-thonny 19.03.2025
Программисты любят, когда код говорит сам за себя. Представьте, что вы можете просмотреть структуру данных и мгновенно понять, что с ней делать — без сложных условий и вложенных проверок. Именно эту. . .
Работа с метаданными EXIF и JPEG в JavaScript
run.dev 19.03.2025
Работа с изображениями в веб-разработке нередко выходит за рамки простого отображения картинки. Современные задачи требуют глубокого понимания структуры файлов и умения манипулировать их внутренними. . .
Чеклист для Kubernetes в продакшене: Лучшие практики для SRE
Mr. Docker 19.03.2025
Когда сталкиваешься с запуском Kubernetes в продакшене, невольно задаешься вопросом: почему то, что так гладко работало в тестовой среде, вдруг начинает вызывать головную боль на боевых системах?. . .
Разработка продвинутого ИИ в Unity с использованием Behavior Graph
GameUnited 19.03.2025
В разработке игр искусственный интеллект персонажей часто становится тем элементом, который превращает хорошую игру в выдающуюся. До недавнего времени разработчикам под Unity приходилось либо писать. . .
Словари в Python: методы работы, оптимизация, сериализация
py-thonny 19.03.2025
Каждый хотя бы раз сталкивался с необходимостью хранить связанные данные, где важна не только сама информация, но и их взаимосвязь. В дебрях Python словари — это тот универсальный инструмент, который. . .
Реализация паттерна CQRS с Event Sourcing в PHP
Jason-Webb 19.03.2025
CQRS (Command Query Responsibility Segregation) — это архитектурный паттерн, который разделяет операции чтения и записи данных в приложении. Если вы столкнулись с ситуацией, когда ваше PHP-приложение. . .
std::span в C++: Подпредставлени­я и срезы
NullReferenced 18.03.2025
Если вы когда-нибудь работали с большими объемами данных в C++, то наверняка сталкивались с необходимостью манипулировать отдельными частями массивов или контейнеров. Традиционные подходы часто. . .
std::span в C++: Доступ к элементам и итерирование
NullReferenced 18.03.2025
В C++ каждый разработчик сталкивается с проблемой эффективного управления последовательностями данных. Представьте: вы работаете с массивом, передаете его в функцию, а затем в другую, и каждый раз. . .
Утечки памяти в C#
UnmanagedCoder 18.03.2025
Когда мы говорим о разработке приложений на C#, то часто успокаиваем себя мыслью, что сборщик мусора решит все наши проблемы с памятью. "Память управляется автоматически" — эта мантра прочно засела в. . .
std::span в C++: Введение в невладеющее представление
NullReferenced 18.03.2025
С появлением стандарта C++20 у нас появился новый инструмент — std::span, который представляет собой невладеющее представление для работы с последовательностями данных. std::span — это легковесный. . .
КиберФорум - форум программистов, компьютерный форум, программирование
Powered by vBulletin
Copyright ©2000 - 2025, CyberForum.ru