Форум программистов, компьютерный форум, киберфорум
Java SE (J2SE)
Войти
Регистрация
Восстановить пароль
Блоги Сообщество Поиск Заказать работу  
 
Рейтинг 4.67/21: Рейтинг темы: голосов - 21, средняя оценка - 4.67
11 / 11 / 2
Регистрация: 21.04.2010
Сообщений: 104

Простые числа

22.01.2012, 17:22. Показов 4294. Ответов 2
Метки нет (Все метки)

Студворк — интернет-сервис помощи студентам
Программа делает следующее: берет текстовый файл в котором хранятся порядковые номера простых чисел, находит максимальный порядковый номер, и потом в аррейлист записывает все простые числа до числа с тем максимальным порядковым номером из файла. Вообще все сводится к проверки чисел на простоту! Как это быстрее сделать? у меня сейчас проверяется делится ли нацело число на ПРОСТЫЕ перед ним, кроме как на само себя. Еще есть такое свойство "число простое, если оно не делится нацело ни на одно из ПРОСТЫХ чисел меньше квадратного корня из самого себя"
и когда я ставлю это условие(меньше квадратного корня из самого себя) то почему то срабатывает не правильно
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
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
import java.io.File;
import java.io.FileNotFoundException;
import java.util.ArrayList;
import java.util.Scanner;
 
public class Main {
 
    public static void main(String[] args) throws FileNotFoundException {
 
        ArrayList<Integer> list = new ArrayList<Integer>();// создаем арейлист
 
        // читаем из файла в лист т.к. не знаем размеров
        Scanner in = new Scanner(new File("числа.txt"));
        while (in.hasNext()) {
            list.add(in.nextInt());
        }
        
        int MAX = 0;//зануляем максимальный порядковый номер
        //находим и запоминаем макс.поряд.номер
        for (int i = 0; i < list.size(); i++) {
            if (list.get(i) > MAX) {
                MAX = list.get(i);
            }
        }
 
        
        ArrayList<Integer> list2 = new ArrayList<Integer>();//аррей лист для простых чисел
        list2.add(2);//записываем первое простое число
        int i = 1;//любое число с 1 т.к. первое ч. уже записано
        int x = 3;//т.к. первое п.ч. записано начинаем с второго
 
        while (MAX != i) {//делаем пока i не равно максимальному числу
            boolean flag = true;
            for (int j = 0; j < list2.size(); j++) {
                if(list2.get(j) < Math.sqrt(x)){
                if (x % list2.get(j) == 0)// если остаток от деления
                // последнего найденого простого
                // числа = 0, то это не простое
                // число
                { 
                    flag = false;
                }
                }
            }
            
            if (flag) {
                i++;
                list2.add(x);
 
            }
            x++;
            
        }
 
        for (int k = 0; k < list.size(); k++) {
            System.out.println(list2.get((list.get(k))-1));
        }
    }
}
а вот без него все впорядке
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
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
import java.io.File;
import java.io.FileNotFoundException;
import java.util.ArrayList;
import java.util.Scanner;
 
public class Main {
 
    public static void main(String[] args) throws FileNotFoundException {
 
        ArrayList<Integer> list = new ArrayList<Integer>();// создаем арейлист
 
        // читаем из файла в лист т.к. не знаем размеров
        Scanner in = new Scanner(new File("числа.txt"));
        while (in.hasNext()) {
            list.add(in.nextInt());
        }
        
        int MAX = 0;//зануляем максимальный порядковый номер
        //находим и запоминаем макс.поряд.номер
        for (int i = 0; i < list.size(); i++) {
            if (list.get(i) > MAX) {
                MAX = list.get(i);
            }
        }       
        ArrayList<Integer> list2 = new ArrayList<Integer>();//аррей лист для простых чисел
        list2.add(2);//записываем первое простое число
        int i = 1;//любое число с 1 т.к. первое ч. уже записано
        int x = 3;//т.к. первое п.ч. записано начинаем с второго
 
        while (MAX != i) {//делаем пока i не равно максимальному числу
            boolean flag = true;
            for (int j = 0; j < list2.size(); j++) {
                if (x % list2.get(j) == 0)// если остаток от деления
                // последнего найденого простого
                // числа = 0, то это не простое
                // число
                {
                    flag = false;
                }
            }
                if (flag) {
                i++;
                list2.add(x);
 
            }
            x++;
            
            }
 
        for (int k = 0; k < list.size(); k++) {
            System.out.println(list2.get((list.get(k)-1)));
        }
    }
}
0
IT_Exp
Эксперт
34794 / 4073 / 2104
Регистрация: 17.06.2006
Сообщений: 32,602
Блог
22.01.2012, 17:22
Ответы с готовыми решениями:

Найти простые числа, которые по модулю меньше числа исходной строки
Ребята спасайте короче нужна программа на java. Сам знаю только основы на делфе, а тут нам на заочке препод такую задачку выдал. Прога...

Перебрать простые числа
Всем привет, помогите пж, не понял смысл задания. Человечество вступило в контакт с инопланетной формой жизни. Данная форма жизни подает...

Java, простые числа
(Если ошибся разделом, извините, я искал...) Нужно найти простые число до 100 и вывести их. &quot;Вроде&quot;, алгоритм более- менее,...

2
 Аватар для RequiemMass
92 / 92 / 18
Регистрация: 06.01.2012
Сообщений: 394
22.01.2012, 18:42
Я исследовал твой алгоритм для MAX=10. Я не очень понимаю смысл задачи твоей, но если макс равно 10 то почему то при твоих счётчиках число до которого будет считать равно 30. Всё дело в том что у тебя MAX сравнивается почему то не с числом x, а с количеством простых чисел. Ну м.б так и надо. Так вот я внёс следующие улучшения, всё работает для MAX=10 правильно.
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
   int MAX=10;
        ArrayList<Integer> list2 = new ArrayList<Integer>();//аррей лист для простых чисел
                list2.add(2);//записываем первое простое число
                int i = 1;//любое число с 1 т.к. первое ч. уже записано
                int x = 3;//т.к. первое п.ч. записано начинаем с второго
 
                while (MAX != i) {//делаем пока i не равно максимальному числу
                        boolean flag = true;
                        double sqrt = Math.sqrt(x);//Это чтобы лишний раз не считать
//для каждого x нового считаем всего лишь 1 раз
                        for (int j = 0; j < list2.size(); j++) {
                                
                                if(list2.get(j) <= sqrt ){//Тут важно ставить (<=)
//Иначе если у нас на входе число 4 и мы должны проверить его делимость на 2
//условие не сработает потому что 2 = 2 соответственно для этого теста где MAX=10
//можешь попробовать убрать это условие и посмотреть как работает алгоритм.
                                if (x % list2.get(j) == 0)
                                {
                                       flag = false;
                                       break;//Это чтобы лишний раз не считать если 
//делится ХОТЯ БЫ НА 1 ЧИСЛО то мы перестаём считать
                                }
                                }
                        }
                        
                        if (flag) {
                            i++;
                            list2.add(x);
                        }
                        x++;
                        
                }
                
                for (int k =0;k<list2.size();k++)
                {
                    System.out.println(list2.get(k));
                }
    }
1
11 / 11 / 2
Регистрация: 21.04.2010
Сообщений: 104
22.01.2012, 19:51  [ТС]
Спасибо, разобрался, ниже код программы которая на входе в текстовом файле получает порядковые номера, а выводит ПРОСТЫЕ числа соответствующие поряд. номерам.
н-р
На входе текстовый файл:
1
3
2
На выходе:
2
5
3
(2-первое простое число, 5-третье простое число, 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
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
import java.io.File;
import java.io.FileNotFoundException;
import java.util.ArrayList;
import java.util.Scanner;
 
public class Main {
 
    public static void main(String[] args) throws FileNotFoundException {
 
        ArrayList<Integer> list = new ArrayList<Integer>();// создаем арейлист
 
        // читаем из файла в лист т.к. не знаем размеров
        Scanner in = new Scanner(new File("числа.txt"));
        while (in.hasNext()) {
            list.add(in.nextInt());
        }
 
        int MAX = 0;// зануляем максимальный порядковый номер
        // находим и запоминаем макс.поряд.номер
        for (int i = 0; i < list.size(); i++) {
            if (list.get(i) > MAX) {
                MAX = list.get(i);
            }
        }
        ArrayList<Integer> list2 = new ArrayList<Integer>();// аррей лист для
                                                            // простых чисел
        list2.add(2);// записываем первое простое число
        int i = 1;// любое число с 1 т.к. первое ч. уже записано
        int x = 3;// т.к. первое п.ч. записано начинаем с второго
 
        while (MAX != i) {// делаем пока i не равно максимальному числу
            double sqrt = Math.sqrt(x);
            boolean flag = true;
            for (int j = 0; j < list2.size(); j++) {
                if (list2.get(j) <= sqrt) {// если простое число меньше корня из
                                            // числа которое проверяем
                    if (x % list2.get(j) == 0)// если остаток от деления
                    // последнего найденого простого
                    // числа = 0, то это не простое
                    // число
                    {
                        flag = false;
                        break;//если делится ХОТЯ БЫ НА 1 ЧИСЛО то мы перестаём считать
                    }
                }
            }
            if (flag) {
                i++;//переход на след. иттерацию
                list2.add(x);//добавление найденного п.ч.
            }
            x++;//след. число для проверки
        }
        //------------------ВЫВОД---------------------------------
        for (int k = 0; k < list.size(); k++) {
            System.out.println(list2.get((list.get(k)) - 1));
        }
    }
}
0
Надоела реклама? Зарегистрируйтесь и она исчезнет полностью.
BasicMan
Эксперт
29316 / 5623 / 2384
Регистрация: 17.02.2009
Сообщений: 30,364
Блог
22.01.2012, 19:51
Помогаю со студенческими работами здесь

Найти простые числа в заданном интервале
Ребята помогите написать программу поиска простых чисел в заданном интервале. Добавлено через 24 минуты Есть наработки int n =...

Вывести все простые числа до 100
Задача такова &quot;выведите все простые числа до 100&quot;, с помощью циклов (без массивов) и заумных вещей. Вот что наковырял. Не могу доделать....

Составить программу разложения числа на простые множители
Составить программу разложения числа на простые множители.

Работа вложенного цикла выводящего простые числа
public class SimpleNumbers{ public static void main (String args) { int i, j; for (i = 2; i &lt;= 100; i++) { for (j = 2;...

Алгоритм теста на простые числа методом перебора делителей
Здравствуйте! Продолжаю изучать Java, на этот раз получил несколько задач, самая нетривиальная из них оказалась следующей: import...


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

Или воспользуйтесь поиском по форуму:
3
Ответ Создать тему
Новые блоги и статьи
Запрет удаления строк ТЧ документа при определенном условии
Maks 19.04.2026
Алгоритм из решения ниже реализован на примере нетипового документа "Аккумуляторы", разработанного в конфигурации КА2. У данного документа есть ТЧ, в которой в зависимости от прав доступа. . .
Модель заражения группы наркоманов
alhaos 17.04.2026
Условия задачи сформулированы тут Суть: - Группа наркоманов из 10 человек. - Только один инфицирован ВИЧ. - Колются одной иглой. - Колются раз в день. - Колются последовательно через. . .
Мысли в слух. Про "навсегда".
kumehtar 16.04.2026
Подумалось тут, что наверное очень глупо использовать во всяких своих установках понятие "навсегда". Это очень сильное понятие, и я только начинаю понимать край его смысла, не смотря на то что давно. . .
My Business CRM
MaGz GoLd 16.04.2026
Всем привет, недавно возникла потребность создать CRM, для личных нужд. Собственно программа предоставляет из себя базу данных клиентов, в которой можно фиксировать звонки, стадии сделки, а также. . .
Знаешь почему 90% людей редко бывают счастливыми?
kumehtar 14.04.2026
Потому что они ждут. Ждут выходных, ждут отпуска, ждут удачного момента. . . а удачный момент так и не приходит.
Фиксация колонок в отчете СКД
Maks 14.04.2026
Фиксация колонок в СКД отчета типа Таблица. Задача: зафиксировать три левых колонки в отчете. Процедура ПриКомпоновкеРезультата(ДокументРезультат, ДанныеРасшифровки, СтандартнаяОбработка) / / . . .
Настройки VS Code
Loafer 13.04.2026
{ "cmake. configureOnOpen": false, "diffEditor. ignoreTrimWhitespace": true, "editor. guides. bracketPairs": "active", "extensions. ignoreRecommendations": true, . . .
Оптимизация кода на разграничение прав доступа к элементам формы
Maks 13.04.2026
Алгоритм из решения ниже реализован на нетиповом документе, разработанного в конфигурации КА2. Задачи, как таковой, поставлено не было, проделанное ниже исключительно моя инициатива. Было так:. . .
КиберФорум - форум программистов, компьютерный форум, программирование
Powered by vBulletin
Copyright ©2000 - 2026, CyberForum.ru