Обчислення факторіала великих чисел

В математиці факторіал числа — це добуток всіх натуральних чисел, менших або рівних даному числу. Іншими словами це результат множення всіх чисел від одного до заданого числа. Наприклад, факторіал числа 7 обчислюється як . Факторіал має багато застосувань, особливо в комбінаториці або в задачах підрахунку, тому для написання математичних програм може знадобитися спосіб його обчислення. Якщо Ви працюєте з мовою програмування Java, то матеріал даного параграфу може бути для Вас корисним. Адже сьогодні нами, використовуючи клас BigInteger, буде розроблена Java-програма для обчислення факторіала будь-якого розміру.

Читати повністю

Розкладання натуральних чисел на прості множники

Основна теорема арифметики стверджує, що будь-яке натуральне число, більше одиниці, можна представити у вигляді добутку простих чисел, причому єдиним способом (якщо не враховувати їх порядок). Наприклад число 125 можна представити як де 5 — просте число. Нагадаємо, що розкладання чисел на добуток простих множників, називається їх факторизацією.

У цьому параграфі, для розкладання чисел на множники, ми скористаємось методом, який базується на повному переборі всіх простих чисел від двох до заданого числа. Зазначимо, що навіть попри такий недостаток, як необхідність у побудові таблиці простих чисел, даний метод досить швидко справляється із завданням, навіть для дуже великих чисел.

// Програма для знаходження розкладання заданого числа на прості множники
import java.util.Scanner;
class Decomposition_by_factors {
public static void main (String args[]) {
Scanner scann = new Scanner(System.in);
// ВВвід числа, розкладання якого необхідно отримати
System.out.print("Enter a number to decompose: ");
int num = scann.nextInt();
int c_num = num;
int n = 0;
int i = 2;
int table[] = new int[num + 1];
int dec[] = new int[num + 1];
// Побудова таблиці простих чисел
table = Sieve_of_eratosthenes(num);
// Знаходження розкладання заданого числа на прості множники
while (num > 1) {
if (table[i] != 0) {
while (num % table[i] == 0) {
num = num / table[i];
dec[n] = table[i];
n++;
}
}
i++;
}
// Вивід результатів роботи програми
System.out.print(c_num  + " =  "+ dec[0]);
for (int j = 1; i <= n - 1; j++) {
System.out.print(" *  " + dec[j]);
}
System.out.print(";");
}

Для побудови таблиці простих чисел, що не перевищують заданого числа, в програмі визначено додатковий методу Sieve_of_eratosthenes — повертає необхідний нам результат у вигляді масиву.

Читати повністю

Решето Ератосфена — метод пошуку простих чисел

Як ми вже встигли переконатись, не всі числа важко ідентифікувати як прості або складені. Наприклад, будь-яке парне число більше 2 є складеним. Однак, хоча деякі числа можуть бути легко класифіковані, для інших дана процедура може бути надзвичайно складною. На щастя, є деякі прийоми, які дозволяють значно спростити процес відшукання простих чисел. Одним з таких прийомів є сито Ератосфена — математичний інструмент, який використовується для виявлення всіх можливих простих чисел між будь-якими двома числами. Метою цього параграфу є максимально ефективна реалізація даного алгоритму засобами Java, не вдаючись до імпорту будь-яких стандартних бібліотек.

Виходячи з того, що пошук, в даному випадку, завжди буде починатись з двійки, то для здійснення задуманого, від користувача, нам знадобиться лише кінець діапазону. Отже, на першому кроці, реалізуємо процес його введення.

// Програма для генерації простих чисел використовуючи решето Ератосфена
import java.util.Scanner;
class Sieve_of_eratosthenes {
public static void main (String args[]) {
Scanner scann = new Scanner(System.in);
// Ввід кінця діапазону
System.out.print("Enter end of range: ");
int end = scann.nextInt();

Далі, оголошуємо та виділяємо пам'ять під масив з числами цілого типу і, простим присвоюванням в циклі (починаючи з двійки і закінчуючи кінцем діапазону) виконуємо запис значень в його комірки.

Читати повністю

Алгоритм Евкліда — знаходження найбільшого спільного дільника

Нагадаємо, що у параграфі найбільший спільний дільник (НСД), нами було сформульовано означення та розглянуто основні методи знаходження НСД. На продовження даної теми, сьогодні буде створена java-програма, яка допоможе швидко визначити найбільший спільний дільник двох додатних цілих чисел використовуючи алгоритм Евкліда. Зазначимо, що наша сьогоднішня програма не буде мати інтерфейсу. Всі дані передаватимуться через консоль.

Отже, для початку створимо «Java Project», потім в ньому створимо «Java Class» і назвемо його, наприклад, Greatest_common_divisor. На наступному кроці, виходячи з того, що для знаходження НCД , від користувача, нам знадобляться два числа number1 і number2, то для їх введення скористаємось класом Scanner з бібліотеки пакетів Java.

// Програма для знаходження найбільшого спільного дільника двох натуральних чисел (НСД)
import java.util.Scanner;
class Greatest_common_divisor {
public static void main (String args[]) {
Scanner scann = new Scanner(System.in);
// Ввід вхідних даних
System.out.print("Enter number1:");
int number1 = scann.nextInt();
System.out.print("Enter number2:");
int number2 = scann.nextInt();

Зазначимо, що для того, щоб не обтяжувати користувача зайвими турботами, ми дозволимо йому вводити числа в довільному порядку, хоча для алгоритму важливо, щоб перше число було більше другого. Тобто, будемо виправляти цю ситуацію програмно, якщо в цьому винекне необхідність.

Читати повністю