Описать функцию IsPrime(N) логического типа, возвращающую True, если целый параметр N (> 1) является простым числом
Описать функцию IsPrime(N) логического типа, возвращающую True, если целый параметр N (> 1) является простым числом, и False в против-ном случае (число, большее 1, называется простым, если оно не имеет по-ложительных делителей, кроме 1 и самого себя). Дан набор из 10 целых чисел, больших 1. С помощью функции IsPrime найти количество простых чисел в данном наборе . помогите решить пожалуйста.
Лучшие ответы ( 1 )
94731 / 64177 / 26122
Регистрация: 12.04.2006
Сообщений: 116,782
Ответы с готовыми решениями:
Создать функцию Chet(k) логического типа,возвращающую True , если целый параметр К является чётным и False в противном случае
Создать функцию Chet(k) логического типа,возвращающую True , если целый параметр К является чётным.
Описать функцию, возвращающую true, если натуральное число является простым, и false в противном случае
Надо написать программу на c++ Описать функцию, возвращающую true, если натуральное число является.
Описать функцию IsPowerN(K, N ) логического типа, проверяющую является ли параметр K степенью числа N
Описать функцию IsPowerN(K, N ) логического типа, возвращающую TRUE, если целый параметр K(>0).
199 / 142 / 57
Регистрация: 06.07.2011
Сообщений: 300
Сообщение было отмечено Асельчи как решение
Решение
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
#include #include #include using namespace std; templateclass Type> void ShowArray(Type * array, int size); templateclass Type> void RandomInput(Type * array, int size); templateclass Type> bool IsPrime(Type value); int main() { int k = 0, n = 10; int arr[n]; RandomInput(arr,n); ShowArray(arr,n); for(int i=0; in; i++) if(IsPrime(arr[i])) k++; cout <"\nкол-во простых чисел = " ; return 0; } templateclass Type> void ShowArray(Type * array, int size) { std::cout <"\nArray : " :: endl; std::cout [ 0]; for(int i=1; isize; i++) std::cout <" " [ i]; std::cout :: endl; } templateclass Type> void RandomInput(Type * array, int size) { srand(time(NULL)); int _n = 10; for(int i=0; isize; i++) array[i] = rand()%_n+2; // =)).. } templateclass Type> bool IsPrime(Type value) { for(Type i=2;ivalue/2;i++) if((value%i)==0) return 0; return 1; }
87844 / 49110 / 22898
Является ли число простым
Хочу написать прогу на C++. Она сначала просит ввести число (простое оно или нет, прога проверяет), потом выводит результат на консоль. Объясните, пожалуйста, как сделать или хоть намекните (среда dev-c++ 4.9.9.2), очень прошу.
Отслеживать
80.6k 9 9 золотых знаков 78 78 серебряных знаков 134 134 бронзовых знака
задан 16 ноя 2011 в 12:40
инклюде димо инклюде димо
45 1 1 золотой знак 1 1 серебряный знак 4 4 бронзовых знака
8 ответов 8
Сортировка: Сброс на вариант по умолчанию
Написать что-то в виде
int n; // ввести n c клавиатуры for (i = 2; i > //вывести что n простое. return 0;
Алгоритм, конечно, можно заметно ускорить, как минимум в два раза, но для начала хватит.
Отслеживать
29.7k 3 3 золотых знака 16 16 серебряных знаков 54 54 бронзовых знака
ответ дан 16 ноя 2011 в 13:01
112k 6 6 золотых знаков 93 93 серебряных знака 159 159 бронзовых знаков
должно быть i<=sqrt(n), иначе квадрат простого числа тоже будет простым.
16 ноя 2011 в 14:14
Тогда, наверное, даже лучше набросить сверху единицу, то есть i
16 ноя 2011 в 14:36
Поправь ответ? И ещё нехорошо на каждой итерации квадратный корень считать.
17 окт 2017 в 15:45
А можно проверять делимость по простым числам. А найти их в не очень большом количестве особого труда не составит. =)
Решето Эратосфена (до корня из n). За 1 секунду находит числа до 10^7 примерно.
А дальше перебор делимости (Либо если число уже найдено Эратосфеном, то и перебирать не придётся) на простые числа, если число больше чем 10^7 также до корня из n.
И всё довольно просто и быстро =)
Отслеживать
ответ дан 21 ноя 2011 в 13:03
147 13 13 бронзовых знаков
Довольна старая тема, но всё же добавлю. Есть одна особенность простых чисел — при возведении числа в квадрат, деление этого числа в квадрате на 24 будет давать остаток 1 ( c 2 и 3 не работает, т.к они слишком маленькие , но с остальными числами работает отлично и не тратит много ресурсов для проверки)
int isprime(int num) < if ((num * num) % 24 == 1) < return true; >return false; >
Отслеживать
3,125 6 6 золотых знаков 18 18 серебряных знаков 33 33 бронзовых знака
ответ дан 16 июл 2019 в 10:23
user344423 user344423
И не только простых, но и составных, что делает данный алгоритм непригодным для определения простых чисел
16 июл 2019 в 11:00
Это не работает с составными числами, только с простыми.youtube.com/watch?v=ZMkIiFs35HQ
– user344423
16 июл 2019 в 21:01
25, 35, 49, 55, 65, 77, 85, 91, 95 и ещё бесконечное количество чисел, которая ваша функция определяет как простые
16 июл 2019 в 21:22
Плюс к тому, кроме 2 и 3, с простого числа 46349 и последующие простые числа определяет как составные
16 июл 2019 в 21:43
В плане эффективности могут намекнуть, например, на тест Рабина-Миллера, но судя по всему, Вам будет проще реализовать проверку тривиальным делением
Отслеживать
ответ дан 16 ноя 2011 в 12:52
3,978 12 12 серебряных знаков 7 7 бронзовых знаков
bool prime(ll n) < for (ll i = 2; i return true; >
Отслеживать
19.1k 6 6 золотых знаков 30 30 серебряных знаков 44 44 бронзовых знака
ответ дан 16 июн 2015 в 17:19
Елдан Абдрашим Елдан Абдрашим
И правильно минуснули. Зачем в цикле проверять делимость на четные?
16 июн 2015 в 19:03
#include #include using namespace std; int main()< int n, i; bool isPrime = true; cout>n; cout > if(isPrime) cout
Это готовый код
Отслеживать
5,199 4 4 золотых знака 27 27 серебряных знаков 51 51 бронзовый знак
ответ дан 17 окт 2017 в 15:40
Bogdan Pahomov Bogdan Pahomov
46 7 7 бронзовых знаков
В первом ответе допущена неточность. Я бы написал так
bool prostoNumer(int n)
PS: дело в том что пропускает 4. Потому что цикл не работает sqrt(4) == 2, 2 < 2 и поэтому цикл завершает работу с ложным результатом. нужно поправить 2 Отслеживать 845 6 6 серебряных знаков 12 12 бронзовых знаков ответ дан 3 апр 2017 в 10:34 1 1 1 бронзовый знак Это есть в комментариях под принятым ответом 3 апр 2017 в 10:39
Обратите внимание на класс Prime . Простое число — число, имеющее два делителя. Это единица и само это число. Следовательно единица простым числом являться не может, так как она имеет один делитель, значит ее нужно исключить. Для этого воспользуемся условным оператором if . После этого начнем искать делители этого числа (будем перебирать все числа, которые меньше указанного числа), напомню делителем называется число, которое делится на данный делитель без остатка, то есть остаток равен 0. Когда нашли такое число, ставим на него булевое значение false, как пометка о том, что данное число является составным. После выполнения управляющей конструкции for остаются некоторые числа, которые не помечены false, то есть не имеют делителя(отличного от себя и 1), помечаем их как true.
namespace one < class Program < static void Main(string[] args) < Prime prime = new Prime(); int AmountOfNumbers = 10; for (int i = 2; i < AmountOfNumbers; i++) < if (prime.IsPrime(i)) < Console.WriteLine(i + " простое число."); >else < Console.WriteLine(i + " составное число."); >> > > class Prime < public bool IsPrime(int x) < if (x >1) < for (int i = 2; i < x; i++) < if ((x % i) == 0) < return false; >> return true; > else < return false; >> > >
Отслеживать
ответ дан 24 фев 2022 в 8:15
EkaterinaR. EkaterinaR.
59 6 6 бронзовых знаков
Код рабочий, но слишком неоптимальный, даже по сравнению с предыдущими ответами
24 фев 2022 в 9:01
Highly active question. Earn 10 reputation (not counting the association bonus) in order to answer this question. The reputation requirement helps protect this question from spam and non-answer activity.
Описать функцию IsPrime(N) логического типа
Описать функцию IsPrime(N) логического типа, возвращающую True, если целый параметр N (> 1) является простым числом, и False в противном случае (число, большее 1, называется простым, если оно не имеет по-ложительных делителей, кроме 1 и самого себя). Дан набор из 10 целых чисел, больших 1. С помощью функции IsPrime найти количество простых чисел в данном наборе.
94731 / 64177 / 26122
Регистрация: 12.04.2006
Сообщений: 116,782
Ответы с готовыми решениями:
Описать функцию IsPrime(N) логического типа, возвращающую True, если целый параметр N (> 1) является простым числом
Описать функцию IsPrime(N) логического типа, возвращающую True, если целый параметр N (> 1).
Описать функцию логического типа
Описать функцию IsSquare (K) логического типа, возвращает TRUE, если целый параметр K (> 0).
Описать функцию IsPowerN(K, N ) логического типа, проверяющую является ли параметр K степенью числа N
Описать функцию IsPowerN(K, N ) логического типа, возвращающую TRUE, если целый параметр K(>0).
Регистрация: 12.07.2020
Сообщений: 14
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
#include #include using namespace std; bool IsPrime(int n) { if (!(n-1)) return false; for (int i = 2;isqrt(n);i++) { if (n%i==0) return false; } return true; } int main() { int s=0,l; for (int i = 0;i10;i++) { cin >> l; if (IsPrime(l)) s++; } cout ; return 0; }
Пиши если есть вопросы
27695 / 17314 / 3809
Регистрация: 24.12.2010
Сообщений: 38,979
Ani_pr, При каждом проходе цикла вызывать sqrt(n) — не жалко?
8864 / 6641 / 907
Регистрация: 14.02.2011
Сообщений: 23,372
Сообщение от Ani_pr
if (!(n-1)) return false;
число 0 простое?
Регистрация: 12.07.2020
Сообщений: 14
ValeryS, Эта проверка на единицу
Добавлено через 1 минуту
Простите понял
Добавлено через 2 минуты
Переделал:
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
#include #include using namespace std; bool IsPrime(int n) { if (n1) return false; int cor = sqrt(n); for (int i = 2;icor;i++) { if (n%i==0) return false; } return true; } int main() { int s=0,l; for (int i = 0;i10;i++) { cin >> l; if (IsPrime(l)) s++; } cout ; return 0; }
8864 / 6641 / 907
Регистрация: 14.02.2011
Сообщений: 23,372
Сообщение от Ani_pr
а теперь еще убыстрим и откажемся от корня
1 2 3 4 5 6 7 8 9 10 11 12
bool IsPrime(int n) { if (n1) return false; if(n==2) return true; // два единственное четное простое if(n%2==0) return false;//остальные четные не простые for (int i = 3;i*in;i+=2)// шагаем через 2 (по нечетным)итерации уменьшаются 3,5,7. { if (n%i==0) return false; } return true; }
87844 / 49110 / 22898
Регистрация: 17.06.2006
Сообщений: 92,604
Помогаю со студенческими работами здесь
Создать функцию Chet(k) логического типа,возвращающую True , если целый параметр К является чётным и False в противном случае
Создать функцию Chet(k) логического типа,возвращающую True , если целый параметр К является чётным.
Описать функцию DecToHex(N) строкового типа
Описать функцию DecToHex(N) строкового типа, возвращающую строковое представление целого .
Описать функцию RootsCount(A, B, C) целого типа
Помогите пожалуйста описать функцию RootsCount(A, B, C) целого типа, определяющую количество корней.
Описать функцию RingS(R1, R2) вещественного типа
Описать функцию RingS(R1, R2) вещественного типа, находящую площадь кольца, заключенного между.
Описать функцию SumRange(A, B) целого типа
Описать функцию SumRange(A, B) целого типа, находящую сумму всех целых чисел от A до B включительно.
Описать функцию Power2(A, N) вещественного типа
Описать функцию Power2(A, N) вещественного типа, находящую величину А^N (А — вещественный, N —.
Программирование на C, C# и Java
Уроки программирования, алгоритмы, статьи, исходники, примеры программ и полезные советы
ОСТОРОЖНО МОШЕННИКИ! В последнее время в социальных сетях участились случаи предложения помощи в написании программ от лиц, прикрывающихся сайтом vscode.ru. Мы никогда не пишем первыми и не размещаем никакие материалы в посторонних группах ВК. Для связи с нами используйте исключительно эти контакты: vscoderu@yandex.ru, https://vk.com/vscode
Является ли число простым — Проверяем на языке Си
Напишем на языке Си программу, проверяющую является ли число простым. Для проверки будем использовать простейший алгоритм, основанный непосредственно на определении простого числа.
Простое число — определение
Простое число — это натуральное число (то есть целое и положительное), большее, чем единица, которое делится без остатка только на единицу и само на себя.
Список простых чисел (приведем до ста) начинается так: 2, 3, 5, 7, 11, 13, 17, 19, 23, 29, 31, 37, 41, 43, 47, 53, 59, 61, 67, 71, 73, 79, 83, 89, 97…
Функция на Си, проверяющая — является ли число простым
Напишем на языке Си функцию, которая будет проверять — простое ли число. И возвращать результат проверки в виде логической величины bool: true (да) или false (нет).
// функция проверяет — простое ли число n
bool isPrime ( int n )
// в цикле перебираем числа от 2 до n — 1
for ( int i = 2 ; i < n ; i ++ )
if ( n % i == 0 ) // если n делится без остатка на i - возвращаем false (число не простое)
return false ;
// если программа дошла до данного оператора, то возвращаем true (число простое) - проверка пройдена
return true ;
else // иначе возвращаем false (число не простое)
return false ;
Алгоритм проверки числа n на простоту строится на определении термина простого числа.
Во-первых число n должно быть больше 1 (проверяем это в строке 5 с помощью условного оператора if), а во-вторых проверяемое число должно иметь только два делителя: 1 и n (проверяем это в строках 8-10 с помощью цикла for и оператора if).
Для работы данного метода требуется подключить заголовочный файл stdbool.h в начале файла с исходным кодом. В stdbool.h содержится определение логических констант true и false, поскольку в чистой версии языка Си они отсутствуют.
Для подключения используем директиву include: