Нужно проверить число на простоту (должно делиться только на 1 и на себя) .
не могу придумать алгоритм.
Другие языки программирования и технологии
Простенькая задача. C#
Идея 5. Скажи что ночь не спал и сам придумал)
using System;
namespace example {
class Program {
static void Main() {
Console.Write(" Введите натуральное число: ");
uint num = uint.Parse(Console.ReadLine());
if (SimpleNumber(num)) Console.WriteLine(" Простое. ");
else Console.WriteLine(" Число не является простым. ");
Console.ReadKey();
}
static bool SimpleNumber(uint number) {
if (number > 1) {
if (number != 2 && number % 2 == 0) return false;
else if (number != 5 && number % 5 == 0) return false;
else {
uint k = number >> 1;
if (k % 2 == 0) ++k;
for (uint n = k; n != 1; n -= 2) if (number % n == 0) return false;
}
} else return false;
return true;
}
}
}
using System;
namespace example {
class Program {
static void Main() {
Console.Write(" Введите натуральное число: ");
uint num = uint.Parse(Console.ReadLine());
if (SimpleNumber(num)) Console.WriteLine(" Простое. ");
else Console.WriteLine(" Число не является простым. ");
Console.ReadKey();
}
static bool SimpleNumber(uint number) {
if (number > 1) {
if (number != 2 && number % 2 == 0) return false;
else if (number != 5 && number % 5 == 0) return false;
else {
uint k = number >> 1;
if (k % 2 == 0) ++k;
for (uint n = k; n != 1; n -= 2) if (number % n == 0) return false;
}
} else return false;
return true;
}
}
}
Тут есть только один алгоритм - перебирать все возможные числа, на которые это число может делиться. Если ни на одно не делится - простое.
Идея 1: перебираем все от 2 до n-1. Тупо, но работает.
Идея 2: число не может делиться на число, большее своей 1/2. Достаточно перебрать от 2 до n/2.
Идея 3: если число делиться на что-то, большее корня из числа, то результат деления будет меньше корня из числа, и число будет делиться и на него тоже. Значит, достаточно перебрать от 2 до корня из n.
Идея 4: если число делится на составное, то также будет делиться и на простые числа, дающие при умножении это составное. Значит, достаточно проверять только простые числа от 2 до корня из n.
Новички обычно реализовывают идею 1 или 2, 3 ненамного сложнее (точнее, вообще не сложнее для программирования, но сложнее для понимания) . Идея 4 - самая правильная, если надо проверять много чисел.
Идея 1: перебираем все от 2 до n-1. Тупо, но работает.
Идея 2: число не может делиться на число, большее своей 1/2. Достаточно перебрать от 2 до n/2.
Идея 3: если число делиться на что-то, большее корня из числа, то результат деления будет меньше корня из числа, и число будет делиться и на него тоже. Значит, достаточно перебрать от 2 до корня из n.
Идея 4: если число делится на составное, то также будет делиться и на простые числа, дающие при умножении это составное. Значит, достаточно проверять только простые числа от 2 до корня из n.
Новички обычно реализовывают идею 1 или 2, 3 ненамного сложнее (точнее, вообще не сложнее для программирования, но сложнее для понимания) . Идея 4 - самая правильная, если надо проверять много чисел.
Похожие вопросы
- Паскаль. Простенькая задача
- Помоги те решить эту задачу C++
- Помогите решить задачу c#
- Необходима помощь в решении задачи. C++
- Помогите с задачей C#, пожалуйста
- Помогите решить задачу: C# Создать рандомную матрицу nxn (выполнено) после чего сложить данные выделенные элементы:
- Помогите написать простенькие задачи в паскале
- Вроде бы простенькая задача С++. Выручайте, не знаю как реализовать.
- Помогите решить задачу C++. Найти номер строки, для которой среднее арифметическое значение ее элементов максимальна
- помогите с задачей - C#