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

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

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

Author24 — интернет-сервис помощи студентам
Программа делает следующее: берет текстовый файл в котором хранятся порядковые номера простых чисел, находит максимальный порядковый номер, и потом в аррейлист записывает все простые числа до числа с тем максимальным порядковым номером из файла. Вообще все сводится к проверки чисел на простоту! Как это быстрее сделать? у меня сейчас проверяется делится ли нацело число на ПРОСТЫЕ перед ним, кроме как на само себя. Еще есть такое свойство "число простое, если оно не делится нацело ни на одно из ПРОСТЫХ чисел меньше квадратного корня из самого себя"
и когда я ставлю это условие(меньше квадратного корня из самого себя) то почему то срабатывает не правильно
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
Programming
Эксперт
94731 / 64177 / 26122
Регистрация: 12.04.2006
Сообщений: 116,782
22.01.2012, 17:22
Ответы с готовыми решениями:

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

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

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

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

2
92 / 92 / 18
Регистрация: 06.01.2012
Сообщений: 394
22.01.2012, 18:42 2
Я исследовал твой алгоритм для 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  [ТС] 3
Спасибо, разобрался, ниже код программы которая на входе в текстовом файле получает порядковые номера, а выводит ПРОСТЫЕ числа соответствующие поряд. номерам.
н-р
На входе текстовый файл:
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
22.01.2012, 19:51
IT_Exp
Эксперт
87844 / 49110 / 22898
Регистрация: 17.06.2006
Сообщений: 92,604
22.01.2012, 19:51
Помогаю со студенческими работами здесь

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

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

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

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

Дано простое число. Составить функцию, которая будет находить следующие простые числа до K-го
Пожалуйста помогите!!! Задание: Дано простое число. Составить функцию, которая будет находить...

Написать программу проверки числа на простоту и в противном случае разложения его на простые множители
1) Рандомное задание числа 15 значное 2) Проверка на простоту и если не простое 3) Разложение...


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

Или воспользуйтесь поиском по форуму:
3
Ответ Создать тему
КиберФорум - форум программистов, компьютерный форум, программирование
Powered by vBulletin
Copyright ©2000 - 2024, CyberForum.ru