Форум программистов, компьютерный форум CyberForum.ru

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

Войти
Регистрация
Восстановить пароль
 
kub
0 / 0 / 0
Регистрация: 30.11.2012
Сообщений: 12
30.11.2012, 15:32     Объясните проверку на простое число #1
Подскажите пожалуйста, сам я из леса и разобраться не получается, есть программа проверяющая число на простоту. Читаю книгу "С++ без страха", так вот без страха пока что то не очень Вопросы следующие:
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;
}
Спасибо заранее
После регистрации реклама в сообщениях будет скрыта и будут доступны все возможности форума.
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.
Schizorb
 Аватар для Schizorb
508 / 460 / 16
Регистрация: 07.04.2012
Сообщений: 865
Записей в блоге: 1
Завершенные тесты: 1
30.11.2012, 15:51     Объясните проверку на простое число #3
1. На мой взгляд тоже, тип можно поменять на bool. Хотя и с int будет работать.
2. Переменной присваивается значение true. Переменные типа bool могут иметь два значения - true и false (эти значения эквиваленты 1 и 0).
3. Функция sqrt- возвращает квадратный корень, она не перегружена для аргумента типа int. Поэтому выполняется явное преобразование в double с помощью static_cast.
ForEveR
Модератор
Эксперт С++
 Аватар для ForEveR
7955 / 4717 / 318
Регистрация: 24.06.2010
Сообщений: 10,525
Завершенные тесты: 3
30.11.2012, 15:55     Объясните проверку на простое число #4
Schizorb, Либо я вас не понял, либо еще что, но
true и false (эти значения эквиваленты 1 и 0)
неверно, ибо false это действительно 0, а true это все что угодно, кроме 0.
kub
0 / 0 / 0
Регистрация: 30.11.2012
Сообщений: 12
30.11.2012, 16:01  [ТС]     Объясните проверку на простое число #5
Большое Вам спасибо, теперь все стало гораздо понятнее
Schizorb
 Аватар для Schizorb
508 / 460 / 16
Регистрация: 07.04.2012
Сообщений: 865
Записей в блоге: 1
Завершенные тесты: 1
30.11.2012, 16:10     Объясните проверку на простое число #6
Цитата Сообщение от ForEveR Посмотреть сообщение
неверно, ибо false это действительно 0, а true это все что угодно, кроме 0.
То что любое целое значение, отличное от 0, преобразуется в true, это понятно. Но разве true не всегда хранится как 00000001?
MoreAnswers
Эксперт
37091 / 29110 / 5898
Регистрация: 17.06.2006
Сообщений: 43,301
30.11.2012, 16:21     Объясните проверку на простое число
Еще ссылки по теме:

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

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

Или воспользуйтесь поиском по форуму:
ForEveR
Модератор
Эксперт С++
 Аватар для ForEveR
7955 / 4717 / 318
Регистрация: 24.06.2010
Сообщений: 10,525
Завершенные тесты: 3
30.11.2012, 16:21     Объясните проверку на простое число #7
Schizorb, Хранится. Значит я вас неверно понял.)
Yandex
Объявления
30.11.2012, 16:21     Объясните проверку на простое число
Ответ Создать тему
Опции темы

Текущее время: 09:10. Часовой пояс GMT +3.
КиберФорум - форум программистов, компьютерный форум, программирование
Powered by vBulletin® Version 3.8.9
Copyright ©2000 - 2017, vBulletin Solutions, Inc.
Рейтинг@Mail.ru