3 / 3 / 0
Регистрация: 23.12.2011
Сообщений: 55
1

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

04.07.2012, 21:15. Показов 33402. Ответов 51
Метки нет (Все метки)

Студворк — интернет-сервис помощи студентам
Приветствую вас!Уважаемые, подскажите пожалуйста как выразить условие в операторе if для нахождения простого числа, с помощью логических и операторов отношений.Если это возможно.Без массивов.Мне нужна просто маленькая подсказка, а остальное я хочу сам допетрить.В голове все знаю и понимаю как эти числа находятся, но не могу выразить в алгоритме кода .Язык С++.Заранее благодарен!
0
Programming
Эксперт
94731 / 64177 / 26122
Регистрация: 12.04.2006
Сообщений: 116,782
04.07.2012, 21:15
Ответы с готовыми решениями:

Программа для нахождения наименьшего простого трехзначного числа
function f(a:integer):byte; var i:integer; begin result:=1; i:=2; while...

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

Как правильно написать условие для простого калькулятора
Данная программа - простой калькулятор. Она должна складывать числа типа int и double. Я делал...

Алгоритм нахождения простого числа
Задача:написать алгоритм нахождения простого числа в интервале а,в,где а и в вводятся с клавиатуры.

51
51 / 51 / 20
Регистрация: 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
2554 / 1319 / 178
Регистрация: 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
3 / 3 / 0
Регистрация: 23.12.2011
Сообщений: 55
04.07.2012, 22:43  [ТС] 4
Уважаемый soon! Спасибо за отзыв,но для меня не постижимы пока такие алгоритмы.Я не сдаю экзамены по программированию,я просто для себя.Хотелось бы по проще,чтобы самому разобраться с циклом for и оператором if-else.А этот алгоритм для меня как набор неизвестных мне символов.
0
2554 / 1319 / 178
Регистрация: 09.05.2011
Сообщений: 3,086
Записей в блоге: 1
05.07.2012, 06:57 5
coreshok, попроще вам представил Alt_Shift.
0
87 / 87 / 1
Регистрация: 19.06.2012
Сообщений: 245
05.07.2012, 08:10 6
soon, вы считаете копипаст который вы отпостили юзабельным?
0
Модератор
Эксперт функциональных языков программированияЭксперт Python
35497 / 19973 / 4184
Регистрация: 12.02.2012
Сообщений: 33,136
Записей в блоге: 13
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
2554 / 1319 / 178
Регистрация: 09.05.2011
Сообщений: 3,086
Записей в блоге: 1
05.07.2012, 17:42 8
PSIAlt, А) где копипаст? Б) да, считаю.
0
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
Higher
1953 / 1219 / 120
Регистрация: 02.05.2010
Сообщений: 2,925
Записей в блоге: 2
05.07.2012, 19:12 10
Цитата Сообщение от coreshok Посмотреть сообщение
Я высоко оценил чувство юмора soon!Я тоже любитель пошутить!Но глядя на фрагмент кода, который предоставил Alt_Shift(спасибо ему за это) и который рекомендовал мне в качестве простого решения soon, хотелось бы выразить свое мнение по поводу корректности написания этого кода.
Просто - не всегда эффективно.
В #2 очень неэффективный вариант, он работает за квадратичную сложность, в то время как у нормальных алгоритмов сложность меньше линейной.
У soon представлен вариант с проверкой числа на простоту во время компиляции, ничего быстрее этого способа быть не может(для данного интервала будет относительно недолгая компиляция).

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

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

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

Добавлено через 3 минуты
Ребята, а может чтобы вам не было скучно я вам задачки веселые буду закидывать. У меня их много!!!
0
Модератор
Эксперт функциональных языков программированияЭксперт Python
35497 / 19973 / 4184
Регистрация: 12.02.2012
Сообщений: 33,136
Записей в блоге: 13
05.07.2012, 20:47 14
Цитата Сообщение от diagon Посмотреть сообщение
вариант с проверкой числа на простоту во время компиляции, ничего быстрее этого способа быть не может
- почему же? Чтобы проверить число на простоту нужно выполнить определенный объем вычислительной работы. Какая разница, когда она выполняется? А если нужно проверять простоту неизвестного заранее количества чисел, это можно выполнить at compile time? Не думаю...

Просто - не всегда эффективно. Согласен. Но вопрос ведь не предполагал реализацию самого эффективного алгоритма... А решето Эратосфена - это классика.
0
2554 / 1319 / 178
Регистрация: 09.05.2011
Сообщений: 3,086
Записей в блоге: 1
05.07.2012, 21:18 15
Какая разница, когда она выполняется?
Разница есть, либо каждый раз вычислять, либо просто вывести. Но если теоретически в первом варианте можно получить любое простое число, то во втором для этого потребуется перекомпиляция.
А если нужно проверять простоту неизвестного заранее количества чисел, это можно выполнить at compile time?
Если их количество неизвестно во время компиляции - разумеется, нет. В противном случае существует алгоритм, и ForEveR уже представлял его.
0
Модератор
Эксперт функциональных языков программированияЭксперт Python
35497 / 19973 / 4184
Регистрация: 12.02.2012
Сообщений: 33,136
Записей в блоге: 13
05.07.2012, 21:25 16
Цитата Сообщение от soon Посмотреть сообщение
Если их количество неизвестно во время компиляции - разумеется, нет
- не представляю себе, для чего может понадобиться программа, которая в сущности говорит: "число 13 - простое"...
0
3 / 3 / 0
Регистрация: 23.12.2011
Сообщений: 55
05.07.2012, 21:36  [ТС] 17
Господа, вот что мне нужно было.
C++
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
#include <iostream>
 
using namespace std;
 
int main()
{
    int i,j;
    bool isprime;
 
    for (i=1;i<100;i++)
    {
        isprime=true;
        for (j=2;j<=i/2;j++)
        if ((i%j)==0)
        isprime=false;
        if (isprime)
        cout <<i <<" is prime.\n";
    }
    return 0;
}
1
87 / 87 / 1
Регистрация: 19.06.2012
Сообщений: 245
06.07.2012, 08:08 18
Цитата Сообщение от Catstail Посмотреть сообщение
- не представляю себе, для чего может понадобиться программа, которая в сущности говорит: "число 13 - простое"...
+1. soon просто хотел показать крутость копипаста.
0
Higher
1953 / 1219 / 120
Регистрация: 02.05.2010
Сообщений: 2,925
Записей в блоге: 2
06.07.2012, 12:21 19
Цитата Сообщение от soon Посмотреть сообщение
Разве? Там ведь один проход.
Я имел в виду поиск чисел с такой проверкой.


Цитата Сообщение от Catstail Посмотреть сообщение
не представляю себе, для чего может понадобиться программа, которая в сущности говорит: "число 13 - простое"...
Ну, например, для реализации хеширования. Суть в том, что для хеширования нужно выбрать простое основание. Чтобы не случалось неприятных ситуаций, можно вставить static_assert, проверяющий, является ли основание простым.
0
Модератор
Эксперт функциональных языков программированияЭксперт Python
35497 / 19973 / 4184
Регистрация: 12.02.2012
Сообщений: 33,136
Записей в блоге: 13
06.07.2012, 13:01 20
т.е. программа будет всегда хэшировать по одному основанию? Не убеждает...
0
06.07.2012, 13:01
IT_Exp
Эксперт
87844 / 49110 / 22898
Регистрация: 17.06.2006
Сообщений: 92,604
06.07.2012, 13:01
Помогаю со студенческими работами здесь

Алгоритм нахождения простого числа
Подскажите, пожалуйста, алгоритм, который с не более чем логарифмической скоростью находил бы...

Как проверить условие равенства в операторе условия
Допустим идет условие &quot; если x=3 то что то делается&quot; как это записать? знаки равенства в...

Как правильно подправить условие в условном операторе?
Program z20; var y,x,a:real; begin writeln('Введите х и а'); readln(x,a); if...

Каково будет условие вывода на экран простого числа( оно делится только на 1 и на себя)
Каково будет условие вывода на экран простого числа( оно делится только на 1 и на себя) Есть вот...


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

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

КиберФорум - форум программистов, компьютерный форум, программирование
Powered by vBulletin
Copyright ©2000 - 2023, CyberForum.ru