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

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

Войти
Регистрация
Восстановить пароль
 
kub
0 / 0 / 0
Регистрация: 30.11.2012
Сообщений: 12
#1

Объясните проверку на простое число - C++

30.11.2012, 15:32. Просмотров 856. Ответов 6
Метки нет (Все метки)

Подскажите пожалуйста, сам я из леса и разобраться не получается, есть программа проверяющая число на простоту. Читаю книгу "С++ без страха", так вот без страха пока что то не очень Вопросы следующие:
1. Почему автор объявление переменной int is_prime; называет Булев флаг? На мой взгляд это просто целочисленная переменная.
2. С is_prime = true; тоже плохо понятно, дайте пожалуйста какие нибудь комментарии по этому поводу.
3. Объясните пожалуйста еще эту строку while (i <= sqrt(static_cast<double>(n))), что тут происходит не совсем понятно.

Всё действо у меня происходит в Visual Studio 2012, если это конечно на что то влияет.

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
#include <iostream>
#include <math.h>
using namespace std;
 
int main() {
    int  n;   // Проверяемое число
    int  i;   // Счетчик циклов
    int  is_prime;   // Булев флаг
 
    // Предположим что число является простым пока не докажем обратное
 
    is_prime = true;
 
    // Считываем число с клавиатуры
 
    cout << "Enter a number and press ENTER: ";
    cin >> n;
    
    // Проверка числа, выполняя проверку делимости
    //  на все целые числа от 2 до sqrt(n).
 
    i = 2;    
    while (i <= sqrt(static_cast<double>(n))) {
              // пока значение переменной i <= sqrt(n),
        
    if (n % i == 0)    // если значение переменной i,
                           // случайно делится на n
        is_prime = false;  // n не является простым числом
       
        i++;       // прибавить 1 к значению переменной i            
    }
 
    // Напечатать результаты
 
    if (is_prime)
        cout << "Number is prime.";
    else
        cout << "Number is not prime.";
 
    return 0;
}
Спасибо заранее
0
Надоела реклама? Зарегистрируйтесь и она исчезнет полностью.
Similar
Эксперт
41792 / 34177 / 6122
Регистрация: 12.04.2006
Сообщений: 57,940
30.11.2012, 15:32
Здравствуйте! Я подобрал для вас темы с ответами на вопрос Объясните проверку на простое число (C++):

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

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

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

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

Дано натуральное число. Найти ближайшее простое число - C++
1. Дано натуральное число. Найти ближайшее простое число. 2. Дано 20 пар однозначных чисел. Первое число каждой пары означает количество...

Передать в функцию целое число. Функция заменяет его на ближайшее простое число, которое больше или меньше исходного. Вернуться в main( ) и распечатат - C++
Передать в функцию целое число. Функция заменяет его на ближайшее простое число, которое больше или меньше исходного. Вернуться в main( ) и...

6
alex_289
3 / 3 / 0
Регистрация: 27.05.2012
Сообщений: 12
30.11.2012, 15:50 #2
Цитата Сообщение от kub Посмотреть сообщение
while (i <= sqrt(static_cast<double>(n)))
преобразование типа n , с int на double , получение его квадратного корня,и сравнение его с i.
1
Schizorb
510 / 462 / 16
Регистрация: 07.04.2012
Сообщений: 869
Записей в блоге: 1
Завершенные тесты: 1
30.11.2012, 15:51 #3
1. На мой взгляд тоже, тип можно поменять на bool. Хотя и с int будет работать.
2. Переменной присваивается значение true. Переменные типа bool могут иметь два значения - true и false (эти значения эквиваленты 1 и 0).
3. Функция sqrt- возвращает квадратный корень, она не перегружена для аргумента типа int. Поэтому выполняется явное преобразование в double с помощью static_cast.
1
ForEveR
В астрале
Эксперт С++
7983 / 4742 / 321
Регистрация: 24.06.2010
Сообщений: 10,547
Завершенные тесты: 3
30.11.2012, 15:55 #4
Schizorb, Либо я вас не понял, либо еще что, но
true и false (эти значения эквиваленты 1 и 0)
неверно, ибо false это действительно 0, а true это все что угодно, кроме 0.
2
kub
0 / 0 / 0
Регистрация: 30.11.2012
Сообщений: 12
30.11.2012, 16:01  [ТС] #5
Большое Вам спасибо, теперь все стало гораздо понятнее
0
Schizorb
510 / 462 / 16
Регистрация: 07.04.2012
Сообщений: 869
Записей в блоге: 1
Завершенные тесты: 1
30.11.2012, 16:10 #6
Цитата Сообщение от ForEveR Посмотреть сообщение
неверно, ибо false это действительно 0, а true это все что угодно, кроме 0.
То что любое целое значение, отличное от 0, преобразуется в true, это понятно. Но разве true не всегда хранится как 00000001?
2
ForEveR
В астрале
Эксперт С++
7983 / 4742 / 321
Регистрация: 24.06.2010
Сообщений: 10,547
Завершенные тесты: 3
30.11.2012, 16:21 #7
Schizorb, Хранится. Значит я вас неверно понял.)
1
30.11.2012, 16:21
MoreAnswers
Эксперт
37091 / 29110 / 5898
Регистрация: 17.06.2006
Сообщений: 43,301
30.11.2012, 16:21
Привет! Вот еще темы с ответами:

Необходимо вывести строку prime, если число простое, или composite, если число составное - C++
Уважаемые программисты, проверьте, пожалуйста, решение задачи Проверьте, является ли число простым. Вводится одно число n. Формат...

Функции. Проверить, простое число или нет. Увеличить его значение на натуральное число M. Проверить, осталось ли оно простым - C++
Помогите пожалуйста 1. Дано натуральное число N, проверить, простое оно или нет. Увеличить его значение на натуральное число M....

простое число - C++
Проверить,является ли введённое целое положительное число простым. простым называется число, которое имеет только два делителя(еденицу и...

Простое число - C++
Вводиться последовательность из N целых положительных элементов. Определить, содержит ли последовательность хотя бы одно простое число. Для...


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

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

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