Форум программистов, компьютерный форум, киберфорум
Наши страницы

С++ для начинающих

Войти
Регистрация
Восстановить пароль
 
 
Рейтинг: Рейтинг темы: голосов - 158, средняя оценка - 4.62
coreshok
3 / 3 / 0
Регистрация: 23.12.2011
Сообщений: 55
#1

Как выразить условие в операторе if для нахождения простого числа - C++

04.07.2012, 21:15. Просмотров 22079. Ответов 50
Метки нет (Все метки)

Приветствую вас!Уважаемые, подскажите пожалуйста как выразить условие в операторе if для нахождения простого числа, с помощью логических и операторов отношений.Если это возможно.Без массивов.Мне нужна просто маленькая подсказка, а остальное я хочу сам допетрить.В голове все знаю и понимаю как эти числа находятся, но не могу выразить в алгоритме кода .Язык С++.Заранее благодарен!
0
Надоела реклама? Зарегистрируйтесь и она исчезнет полностью.
Similar
Эксперт
41792 / 34177 / 6122
Регистрация: 12.04.2006
Сообщений: 57,940
04.07.2012, 21:15
Здравствуйте! Я подобрал для вас темы с ответами на вопрос Как выразить условие в операторе if для нахождения простого числа (C++):

Использование второй функции для нахождения простого числа и её ошибки - C++
Здравствуйте! Помогите разобраться с функциями, имеющие возвращающие значение. Суть программы в том, что она считывает число и...

Каково будет условие вывода на экран простого числа( оно делится только на 1 и на себя) - C++
Каково будет условие вывода на экран простого числа( оно делится только на 1 и на себя) Есть вот это(точно не знаю, верна ли она), она НЕ...

Условие в операторе switch - C++
Всем привет, есть коД: switch(TYPE) { case 1: total = number1 + number2; cout << "\n" <<...

Как выразить из числа Arc tg - C++
Подскажите пожалуйста. Как выразить из числа Arc tg из переменой zn в градусах!

Функция для простого числа - C++
В головной функции ввести массив чисел.И вывести количество простых чисел.Вот программа.Только почему-то, если она натыкается на составное...

как правильно в программке записать условие нахождения бесконечности? - C++
в примере y=exp(x)/x, где x принимает значения от -6 до + 1 c шагом 1 необходимо определить при каких x функция y=0 и бесконечности. ...

50
Alt_Shift
50 / 50 / 2
Регистрация: 28.05.2012
Сообщений: 161
04.07.2012, 21:24 #2
C++
1
2
3
4
5
6
7
8
9
10
int a,sum=0;
cin>>a;
for(int i=1;i<a;i++)
{
if(a%i==0)
sum++;
}
if(sum>1);
else
cout<<"Простое"
1
soon
2542 / 1307 / 81
Регистрация: 09.05.2011
Сообщений: 3,086
Записей в блоге: 1
04.07.2012, 21:54 #3
C++
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
#include <iostream>
#include <cstdlib>
 
template <std::size_t N, std::size_t Current>
struct _Prime
{
    static const bool is_prime =    (
                                        (N % Current) ? 
                                            (_Prime<N, Current - 1>::is_prime) :
                                            (false)
                                    );
};
 
template <std::size_t N>
struct _Prime<N, 1>
{
    static const bool is_prime = true;
};
 
template <std::size_t N>
struct _Prime<N, 0>
{
    static const bool is_prime = true;
};
 
template <std::size_t N>
struct Prime
{
    static const bool is_prime = _Prime<N, N / 2>::is_prime;
};
 
template <>
struct Prime<1>
{
    static const bool is_prime = false;
};
 
template <>
struct Prime<0>
{
    static const bool is_prime = false;
};
 
int main()
{
    std::cout << Prime<1>::is_prime << std::endl;
    std::cout << Prime<2>::is_prime << std::endl;
    std::cout << Prime<3>::is_prime << std::endl;
    std::cout << Prime<4>::is_prime << std::endl;
    std::cout << Prime<97>::is_prime << std::endl;
    return 0;
}
2
coreshok
3 / 3 / 0
Регистрация: 23.12.2011
Сообщений: 55
04.07.2012, 22:43  [ТС] #4
Уважаемый soon! Спасибо за отзыв,но для меня не постижимы пока такие алгоритмы.Я не сдаю экзамены по программированию,я просто для себя.Хотелось бы по проще,чтобы самому разобраться с циклом for и оператором if-else.А этот алгоритм для меня как набор неизвестных мне символов.
0
soon
2542 / 1307 / 81
Регистрация: 09.05.2011
Сообщений: 3,086
Записей в блоге: 1
05.07.2012, 06:57 #5
coreshok, попроще вам представил Alt_Shift.
0
PSIAlt
87 / 87 / 8
Регистрация: 19.06.2012
Сообщений: 245
05.07.2012, 08:10 #6
soon, вы считаете копипаст который вы отпостили юзабельным?
0
Catstail
Модератор
23004 / 11371 / 1852
Регистрация: 12.02.2012
Сообщений: 18,609
05.07.2012, 09:23 #7
soon шутит... Вот простое решение, которое ищет все простые числа в диапазоне от 1 до n. Называется "решето Эратосфена":

C++
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
#include "iostream.h"
#include "math.h"
 
int main(int argc, char* argv[])
{
    int *Rg;
    int i,j,n;
 
    cout << "Enter n: ";
    cin >> n;
 
    Rg=new int[n];
 
    for (i=0; i<n; i++) Rg[i]=i;
 
    for (j=2; j <= sqrt(n); j++)
        for (i=1; i<n; i++)
            if (((i % j) == 0) && (i != j)) Rg[i]=0;
 
    cout << "Primary numbers in range [1," << n <<"] are:" << endl;
 
    for (i=1; i < n; i++) 
        if (Rg[i] > 0) cout << Rg[i] << endl;
 
    delete [] Rg;
 
    return 0;
}
1
soon
2542 / 1307 / 81
Регистрация: 09.05.2011
Сообщений: 3,086
Записей в блоге: 1
05.07.2012, 17:42 #8
PSIAlt, А) где копипаст? Б) да, считаю.
0
coreshok
3 / 3 / 0
Регистрация: 23.12.2011
Сообщений: 55
05.07.2012, 18:47  [ТС] #9
Я высоко оценил чувство юмора soon!Я тоже любитель пошутить!Но глядя на фрагмент кода, который предоставил Alt_Shift(спасибо ему за это) и который рекомендовал мне в качестве простого решения soon, хотелось бы выразить свое мнение по поводу корректности написания этого кода. Он просто не работает. Я в своем вопросе не так выразился.Задача была найти простые числа в диапазоне от 1 до 100.Это условие должно быть заключено в цикл for c операторами if.Сейчас я вижу как это работает.Это возможно выразить без массивов и указателей.До скорого!

Добавлено через 1 час 0 минут
Я рискну немного поправить ваш код уважаемый Catstail.Так как единица не является простым числом, то в первом цикле for начальное значение счетчика i можно установить 2.
0
diagon
Higher
1932 / 1198 / 49
Регистрация: 02.05.2010
Сообщений: 2,925
Записей в блоге: 2
05.07.2012, 19:12 #10
Цитата Сообщение от coreshok Посмотреть сообщение
Я высоко оценил чувство юмора soon!Я тоже любитель пошутить!Но глядя на фрагмент кода, который предоставил Alt_Shift(спасибо ему за это) и который рекомендовал мне в качестве простого решения soon, хотелось бы выразить свое мнение по поводу корректности написания этого кода.
Просто - не всегда эффективно.
В #2 очень неэффективный вариант, он работает за квадратичную сложность, в то время как у нормальных алгоритмов сложность меньше линейной.
У soon представлен вариант с проверкой числа на простоту во время компиляции, ничего быстрее этого способа быть не может(для данного интервала будет относительно недолгая компиляция).

Кстати, я так и не понял, вам нужно найти простые числа, или проверить на простоту?
0
coreshok
3 / 3 / 0
Регистрация: 23.12.2011
Сообщений: 55
05.07.2012, 19:40  [ТС] #11
Ну конечно же простое число.Может меня не правильно понимают.Я уже третий пост пишу со словами "простые числа".Это числа которые делятся на 1 и на само себя.

Добавлено через 2 минуты
Что вы имели ввиду под словами"В #2 очень неэффективный вариант", здесь три варианта.

Добавлено через 10 минут
Уважаемый diagon и многоуважаемые корифеи в программировании.Спуститесь на землю.Я попросил всего лишь описание работы цикла for и операторов if при нахождении простых чисел в диапазоне от 1 до ста.Без массивов, без операции разрешения, без указателей и т.д.Мне не важно как быстро будет проходить компиляция и как быстро будет выполнятся программа.С уважением!
0
soon
2542 / 1307 / 81
Регистрация: 09.05.2011
Сообщений: 3,086
Записей в блоге: 1
05.07.2012, 19:47 #12
Цитата Сообщение от coreshok Посмотреть сообщение
Ну конечно же простое число.Может меня не правильно понимают.Я уже третий пост пишу со словами "простые числа".Это числа которые делятся на 1 и на само себя.
Вам нужно найти все простые числа в заданном промежутке или просто проверить, является ли данное число простым?
Цитата Сообщение от coreshok Посмотреть сообщение
Что вы имели ввиду под словами"В #2 очень неэффективный вариант", здесь три варианта.
Первый представленный код.
Цитата Сообщение от diagon Посмотреть сообщение
он работает за квадратичную сложность
Разве? Там ведь один проход.
Уважаемый diagon и многоуважаемые корифеи в программировании.Спуститесь на землю.Я попросил всего лишь описание работы цикла for и операторов if при нахождении простых чисел в диапазоне от 1 до ста.Без массивов, без операции разрешения, без указателей и т.д.Мне не важно как быстро будет проходить компиляция и как быстро будет выполнятся программа.С уважением!
Нуу, это скучно. К тому же вам Catstail представил решето Эратосфена.
Без массивов
Смысл в этих числах, если их нельзя будет потом использовать?
0
coreshok
3 / 3 / 0
Регистрация: 23.12.2011
Сообщений: 55
05.07.2012, 20:12  [ТС] #13
Позволю себе закинуть вам леща! Мне понравились слова "Нуу, это скучно. К тому же вам Catstail представил решето Эратосфена"и "Смысл в этих числах, если их нельзя будет потом использовать?".Это говорит обо всем)))

Добавлено через 3 минуты
Ребята, а может чтобы вам не было скучно я вам задачки веселые буду закидывать. У меня их много!!!
0
Catstail
Модератор
23004 / 11371 / 1852
Регистрация: 12.02.2012
Сообщений: 18,609
05.07.2012, 20:47 #14
Цитата Сообщение от diagon Посмотреть сообщение
вариант с проверкой числа на простоту во время компиляции, ничего быстрее этого способа быть не может
- почему же? Чтобы проверить число на простоту нужно выполнить определенный объем вычислительной работы. Какая разница, когда она выполняется? А если нужно проверять простоту неизвестного заранее количества чисел, это можно выполнить at compile time? Не думаю...

Просто - не всегда эффективно. Согласен. Но вопрос ведь не предполагал реализацию самого эффективного алгоритма... А решето Эратосфена - это классика.
0
soon
2542 / 1307 / 81
Регистрация: 09.05.2011
Сообщений: 3,086
Записей в блоге: 1
05.07.2012, 21:18 #15
Какая разница, когда она выполняется?
Разница есть, либо каждый раз вычислять, либо просто вывести. Но если теоретически в первом варианте можно получить любое простое число, то во втором для этого потребуется перекомпиляция.
А если нужно проверять простоту неизвестного заранее количества чисел, это можно выполнить at compile time?
Если их количество неизвестно во время компиляции - разумеется, нет. В противном случае существует алгоритм, и ForEveR уже представлял его.
0
05.07.2012, 21:18
MoreAnswers
Эксперт
37091 / 29110 / 5898
Регистрация: 17.06.2006
Сообщений: 43,301
05.07.2012, 21:18
Привет! Вот еще темы с ответами:

написать программу для прверки простого числа. язык программировние С - C++
Дано целое число, не превосходящее 2^32=4294967296. Написать программу для проверки того, является ли данное число простым. ...

функции для вычисления среднего значения и определения простого числа - C++
Здравствуйте. У меня просьба. Помогите выполнить задачу по программированию. Массив сформирован, есть код. А как дальше быть с...

Создать функции для вычисления среднего значения и определения простого числа. - C++
Из положительных значений двух целочисленных массивов различной размерно- сти сформировать общий массив. Найти среднее арифметическое...

Составить программу для нахождения числа, которое образуется из данного натурального числа при записи его цифр в обратном порядке - C++
помогите кто нибудь,пожалуйста,я на сайте первый раз,низнаю к кому обратиться..помогите написать прогу на языке с++ вот задание. ...


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

Или воспользуйтесь поиском по форуму:
15
Ответ Создать тему
Опции темы

КиберФорум - форум программистов, компьютерный форум, программирование
Powered by vBulletin® Version 3.8.9
Copyright ©2000 - 2018, vBulletin Solutions, Inc.