Добавил:
Upload Опубликованный материал нарушает ваши авторские права? Сообщите нам.
Вуз: Предмет: Файл:
ЗадачникПоТПиРнаЭВМ.doc
Скачиваний:
28
Добавлен:
11.03.2016
Размер:
1 Mб
Скачать

Глава 4. Делители целого числа

Для нахождения всех делителей некоторого натурального числа N, исключая 1 и само число, следует перебрать все натуральные значения от 2 до [N/2], так как в интервале от [N/2]+1 до N множителей нет [26]. Здесь [x] – целая часть числа x.

Листинг 4.1. Определить все делителели некоторого натурального числа N, за исключением 1 и самого числа.

//L4_1.cpp

#include <iostream>

using namespace std;

int main()

{

setlocale(LC_CTYPE,"russian");

int n,d;

do //Цикл гарантирует

{ //введение натурального

cout<<"Введите n "; //числа.

cin>>n;

}while (n<=0);

for(d=2;d<=n/2;d++) //Нахождение делителей

{

if(n%d==0)

cout<<d<<" ";

}

cout<<endl;

return 0;

}

Результат работы программы листинга 4.1 приведен на рис. 4.1:

Рис. 4.1. Результат работы программы листинга 4­.1

Следует отметить, что можно искать делители среди натуральных чисел, не превышающих квадратный корень из исходного числа, а остальные делители получаются в результате деления этого числа на найденные делители, то есть цикл «Нахождение делителей» будет иметь следующий заголовок:

for(d=2; d*d<=n; d++) .

В этом случае результат работы программы представлен на рис. 4.2.

Рис. 4.2. Результат работы программы листинга 4­.2

Листинг 4.2. Найти наибольший общий делитель (НОД) двух неотрицательных целых чисел m и n, используя алгоритм Евклида [4, 26]. Алгоритм Евклида основывается на том, что для двух чисел m и n, причем mn, НОД(m, n) = НОД(n,r), где r – остаток от деления m на n. Если n = 0, то НОД(m,0)= m.

//L4_2.cpp

#include <iostream>

using namespace std;

int main()

{

setlocale(LC_CTYPE,"russian");

int n,m,r;

do // Цикл гарантирует

{ // введение натуральных

// чисел.

cout<<"Введите натуральные числа m и n ";

cin>>m>>n;

}while (m <= 0 || n <= 0);

if (m < n)

{

r=m;

m=n;

n=r;

}

while (n > 0)

{

r=m % n;

m=n;

n=r;

}

cout<<"Наибольший общий делитель "<<m<<endl;

return 0;

}

На рис. 4.3 представлен результат выполнения программы листинга 4.2.

Рис. 4.3. Результат работы программы листинга 4­.2

Листинг 4.3. Найти простые числа, не превышающие заданного натурального числа N [26].

Первые простые числа – это 2 и 3. Если введенное число совпадает с ними, то их следует напечатать. В остальных случаях следует проверить, имеет ли текущее число делители меньше кадратного корня из числа. Четные числа проверять нет необходимости, так как они всегда имеют делитель 2.

//L4_3.cpp

#include <iostream>

using namespace std;

int main()

{

setlocale(LC_CTYPE,"russian");

int N,d,k;

do //Цикл гарантирует

{ //введение натурального

//числа.

cout<<"Введите натуральное число n ";

cin>>N;

}while (N<=0);

if(N>=2)

cout<<2<<" ";

if(N>=3)

cout<<3<<" ";

k=5;

while (k<=N)

{

for(d=2; d*d<k && k%d !=0; d++)

;

if(d*d>k) //Число простое

cout<<k<<" ";

k+=2;

}

cout<<endl;

return 0;

}

Результат работы программы листинга 4.3 приведен на рис. 4.4:

Рис. 4.4. Результат работы программы листинга 4­.3

Упражнения

  1. Для натурального числа N найти сумму всех делителей, включая 1 и само число.

  2. Для натурального числа N найти число четных делителей.

  3. Для натурального числа N найти число всех делителей, исключая 1 и само число.

  4. Для натурального числа N найти сумму всех нечетных делителей, включая 1 и само число (если оно нечетное).

  5. Для натурального числа N найти сумму всех четных делителей, включая и само число (если оно четное).

  6. Найти все натуральные числа из интервала от 1 до 200, у которых сумма делителей равна N.

  7. Найти все натуральные числа из интервала от 1 до 200, у которых число делителей равно N.

  8. Найти все натуральные числа из интервала от N 1 до N 2, у которых сумма делителей больше K.

  9. Найти все натуральные числа из интервала от N 1 до N 2, у которых сумма делителей меньше или равна K.

  10. Найти натуральное число в диапазоне от 1 до10 000 с максимальной суммой делителей.

  11. Найти натуральное число в диапазоне от 1 до 10 000 с минимальной суммой делителей.

  12. Найти натуральное число в диапазоне от 1 до 10 000 с максимальным числом делителей.

  13. Найти количество делителей натурального числа N, больших K.

  14. Даны целые числа p и q. Получить все делители числа q, взаимно простые с p. Числа называются взаимно простыми, если у них нет ощих делителей, кроме 1. Например, 15 и 8.

  15. Получить все простые делители числа N.

  16. Среди всех четырехзначных чисел найти все простые числа, у которых сумма двух старших цифр равна сумме двух младших цифр.

  17. Найти наибольший обший делитель трех чисел НОД(N,M,K), используя соотношение НОД(N,M,K) = НОД(НОД(N,M),K).

  18. Даны натуральные числа M и N. Получить все кратные им числа, меньшие MN.

  19. Для натуральных чисел N и M найти наименьшее общее кратное, используя соотношение НОК(N,M)= NM / НОД(N,M).

  20. Найти наибольший обший делитель n чисел НОД(N1,N2,…,Nk), используя соотношение:

НОД(N1,N2,…,Nk) = НОД(НОД(N1,N2,…),Nk) =

НОД(НОД(НОД(N1,N2,…,Nk-2), Nk-1) ,Nk) и так далее.

  1. Найти все совершенные натуральные числа не превосходящие N. Совершенным называется число, равное сумме своих делителей, включая 1 и исключая само число. Например, 28=1+2+4+7+14.

  2. Найти все совершенные натуральные числа из интервала от N 1 до N 2 .

  3. Найти все простые множители числа N, причем каждый из них должен быть выведен столько раз, сколько он встречается в исходном числе. Например, N = 28 = 227.

  4. Найти все простые множители числа N, причем каждый из них должен быть выведен один раз. Например, N = 28 2 7.

  5. Найти все пары дружественных натуральных чисел из интервала от N 1 до N 2. Два числа называются дружественными, если каждое из них равно сумме делителей другого (само число в качестве делителя не рассматривается).

ГЛАВА 5. Сортировка данных

Сортировку данных можно осуществлять различными алгоритмами. Среди них наиболее часто применяются следующие методы [10]: сортировка вставкой, метод пузырька, сортировка выбором и быстрая сортировка. Рассмотрим эти методы подробнее.