Пример 2. Проверка на простое число с использованием цикла for
Лабораторная №3
Циклы в С++
Инструкция for предоставляет именно механизм, позволяющий указать инициализатор, условие п инкремент.
· инициализатор: вычисляется всего 1 раз перед началом цикла
· условие
· инкремент: вычисляется каждый раз после выполнения тела цикла
for (i = 1;i <= 10;i++)
cout<<i<<"
Такая запись является не только более сжатой, но и более аккуратной. Все параметры, управляющие выполнением цикла, располагаются в круглых скобках. Более формально, вот синтаксис инструкции for вместе с эквивалентным циклом, использующим инструкцию while.
Пример 1. Печать целых чисел от 10 до 20.
for(i=10;i<=20;i++)
cout << i << " ";
В результате получим:
10 11 12 13 14 15 16 17 18 19 20
Упражнение 1. Используйте инструкцию for в программе, которая печатает все числа в диапазоне от n1 до n2, где n1 и n2 - это два числа, введенных пользователем.
Упражнение 2. Перепишите пример таким образом, чтобы числа от n до 1 печатались в обратном порядке. Например, пользователь ввел число 5 и программа напечатала 5 4 3 2 1. (Подсказка: в цикле, образованном при помощи инструкции for, проинициализируйте переменную i значением n, используйте в условии i >= 1 и вычитайте 1 из значения переменной i на шаге инкремента.)
Пример 2. Проверка на простое число с использованием цикла for
Программа определяет, является ли введенное число простым. (Вспомните, что число является простым, если оно делится без остатка только на само себя и единицу.)
Логика проверки на простое число следующая:
Установить значение переменной i в 2.
Пока значение переменной i меньше или равно квадратному корню числа n,
Если число n делится без остатка на значение переменной i,
Число n не является простым.
Прибавить 1 к значению переменной i.
Для (инструкция for) всех целых чисел от 2 до квадратного корня числа n,
Если число n делится без остатка на значение переменной i,
Число n не является простым.
#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;
// Цикл
for (i = 2; i <= sqrt((double) n); i++) {
if (n % i == 0)
is_prime = false;
}
// Печать результатов
if (is_prime)
cout << "Number is prime.";
else
cout << "Number is not prime.";
return 0;
}
Примечание: sqrt((double) n) – квадратный корень из n.
Упражнение 3. Модифицируйте пример таким образом, чтобы он использовал оптимальный код. Когда вы учитываете молниеносную скорость современных микропроцессоров, наверняка вы не заметите различия в скорости выполнения, хотя если вы попытаетесь выполнить проверку для чрезвычайно огромного числа, скажем, больше миллиарда, возможно, вы заметите небольшое отличие во времени ответа.
В любом случае, следующие изменения в коде помогут сделать программу более эффективной при работе с большими числами:
✓ Вычисляйте квадратный корень числа n только один раз, объявив переменную square_root_of_n и определив ее значение перед входом в цикл for. Чтобы избежать предупреждений компилятора, необходимо объявить переменную типа double.
✓ Как только найден делитель числа n, нет необходимости продолжать поиск. Поэтому, в инструкцию if внутри цикла добавьте инструкцию break (прерывающую выполнение цикла) после установки значения переменной is_prime в значение false.
Упражнение 4. Посчитать
a)
b)
Пользователь вводит x (переменная x должна быть объявлена как double).