Тема. Рекурентні цикли. Оператори while та do-while.
«Виведення простих чисел»
ЗАВДАННЯ ДЛЯ ВИКОНАННЯ
Дано: два натуральних числа a та b.
Знайти: Для кожного з чисел a, a+1, a+2,..., b з’ясувати, чи є воно простим. Якщо число просте, то вивести його на екран.
Знайти: Для кожного з чисел a, a+1, a+2,..., b з’ясувати, чи є воно простим. Якщо число просте, то вивести його на екран.
ЗМІННІ:
Вхідні:
a – ліва границя інтервалу (цілого типу int)
b – права границя інтервалу (цілого типу int)
a – ліва границя інтервалу (цілого типу int)
b – права границя інтервалу (цілого типу int)
Вихідні:
p – ознака наявності дільників (логічного типу, p=false немає дільників, p=true є дільники )
p – ознака наявності дільників (логічного типу, p=false немає дільників, p=true є дільники )
Проміжні:
n – натуральне число з інтервалу [a, b] та параметр зовнішнього циклу (цілого типу int, бо число натуральне)
i – дільники числа n та параметр внутрішнього циклу (цілого типу int)
2. Для кожного числа n із цього інтервалу ми повинні повністю виконати попередній алгоритм, починаючи з пункту 2. Тому у нас будуть вкладені цикли:
- присвоює початкове значення ознаці p=false. Тобто вважаємо, що дільників у числа n немає. Це обов’язково потрібно зробити у зовнішньому циклі, але перед внутрішнім.
- якщо p=true, то є дільники, число не просте, число не виводиться, виконується перехід на наступний виток зовнішнього циклу для обробки наступного числа.
n – натуральне число з інтервалу [a, b] та параметр зовнішнього циклу (цілого типу int, бо число натуральне)
i – дільники числа n та параметр внутрішнього циклу (цілого типу int)
АЛГОРИТМ
1. Спочатку вводимо натуральні числа a та b, що є границями інтервалу.2. Для кожного числа n із цього інтервалу ми повинні повністю виконати попередній алгоритм, починаючи з пункту 2. Тому у нас будуть вкладені цикли:
- зовнішній цикл:
- присвоює початкове значення ознаці p=false. Тобто вважаємо, що дільників у числа n немає. Це обов’язково потрібно зробити у зовнішньому циклі, але перед внутрішнім.
- У внутрішньому циклі будемо шукати дільники числа n.
- Коли внутрішній цикл закінчиться, то перевіримо значення ознаки:
- якщо p=true, то є дільники, число не просте, число не виводиться, виконується перехід на наступний виток зовнішнього циклу для обробки наступного числа.
package prostiNumbers; import java.util.Scanner; //імпорт класу public class Primes { //Для кожного з чисел a, a+1, a+2,..., b з’ясувати, чи є воно простим. //Якщо число просте, то вивести його на екран. public static void main(String[] args) { Scanner a = new Scanner(System.in); //створення об'єкту класу Scanner - a Scanner b = new Scanner(System.in); //створення об'єкту класу Scanner - b int x=0, y=0, n=0, i=0; boolean p; System.out.println("Введіть a: "); System.out.println("Введіть b: "); if(a.hasNextInt() && b.hasNextInt()) { //повертає істина, якщо введено ціле число, зчитує ціле число і записує в змінну x = a.nextInt(); y = b.nextInt(); System.out.print("В ітервалі "+"["+x+","+y+"] "+"прості числа: "); for(i=x; i<=y; i++){ //розглядаємо тільки непарні числа, бо серед парних простим є тільки 2 if(i%2==1){ p=true; n=3; while(n<i/2 && p){ if(i%n==0){ p=false; } else n=n+2; } if(p=true) System.out.print(i+", "); } } }else{ System.out.println("Ви ввели не ціле число a,b"); } } }
РЕЗУЛЬТАТ
Пояснення:
Введіть a: Введіть b: 10 50 В ітервалі [10,50] прості числа: 11, 13, 15, 17, 19, 21, 23, 25, 27, 29, 31, 33, 35, 37, 39, 41, 43, 45, 47, 49,
Пояснення:
Для кожного з чисел 10, 11, 12, ... шукаємо дільники в інтервалі [2,n div 2].
У числа 10 в інтервалі [2,5] є дільники 2 та 5, тобто число не просте.
У числа 11 в інтервалі [2,5] немає дільників, тобто число просте і тому виводиться на екран.
У числа 12 в інтервалі [2,6] є дільники 2, 3, 4 та 6, тобто число не просте.
У числа 13 в інтервалі [2,6] немає дільників, тобто число просте і тому виводиться на екран.
У числа 14 в інтервалі [2,7] є дільники 2 та 7, тобто число не просте.