- •Министерство образования российской федерации
- •1. Вычисление значений функции
- •Упражнения
- •2. Выделение областей
- •Упражнения
- •3. Суммирование рядов
- •Упражнения
- •4. Позиционная запись числа
- •Упражнения
- •5. Делители целого числа
- •Упражнения
- •6. Преобразование и построение одномерных массивов
- •6.1 Линейный поиск в массиве
- •6.2 Построение массива без повторений
- •Упражнения
- •7. Максимальный и минимальный элементы массива.Сортировка
- •Упражнения
- •8. Обработка последовательностей символов
- •Упражнения
- •9. Преобразование и построение Матриц
- •Упражнения
- •Литература
5. Делители целого числа
Пример 1. Найти все делители неотрицательного целого числа n.
Вариант 1.Самый простой способ решения – это проверить по очереди делимость числа nна каждое из чисел 1,2,3, ... ,n. Число операций можно сократить, доказав, что в интервале [n/2+1,n-1] делителей числаnнет.
#include <iostream.h>
main()
{ int n,d;
cin>>n;
for (d=1;d<=n/2;d++)
if(n%d==0)
cout<<d<<endl;
}
Вариант 2. Для нахождения делителей числа n, достаточно обнаружить делители не превышающие значения квадратного корня из числаn. Все остальные делители получаются в результате деления числаnна найденные делители.
#include <iostream.h>
main()
{ int n,d;
cin>>n;
for (d=1;d*d<n;d++)
if(n%d==0)
cout<<d<<", "<<n/d<<endl;
if(d*d==n)
cout<<d<<endl;
}
Пример 2. Найти наибольший делитель двух неотрицательных целых чисел.
Решение основано на алгоритме Евклида, многократно использующим целочисленную операцию деления с остатком:
n=q*m+r0,
m=q0*r0+r1,
r0=q1*r1+r2
..........................
rk-1=qk*rk+rk+1,
...........
rj-1=qj*rj,
где rj– наибольший общий делитель.
#include <iostream.h>
main()
{ long int n,m,r,tmp;
cin>>n>>m;
if(m>n)
{ tmp=m; m=n; n=tmp;}
while(m>0)
{ r=n%m; n=m; m=r; }
cout<<n;
}
Пример 3. Найти все простые числа , меньшие заданного натурального числа n.
Вариант 1.
Для решения задачи необходимо проверить имеют ли числа из заданного интервала делители, не превышающие значения квадратного корня из числа n.. Четные числа можно не рассматривать, поскольку они делятся на два.
#include <iostream.h>
main()
{ int d,k,n;
cin>>n;
cout<<1<<endl<<2<<endl<<3<<endl;
k=5;
while (k<=n)
{ for (d=2;d*d<=k && k%d!=0;d++)
;
if(d*d>k)
cout<<k<<endl;
k=k+2;
}
}
Упражнения
Дано натуральное число N. Получить все его натуральные делители.
Найти количество делителей натурального числа N. Сколько из них четных?
Найти сумму нечетных делителей натурального числа N.
Найти все натуральные числа из интервала от 1 до 200, у которых количество делителей равно N.
Найти сумму целых чисел из промежутка от 1 до 200, у которых ровно 5 делителей
Найти все целые числа из промежутка от 100 до 300, у которых сумма делителей равна К.
Найти натуральное число лежащее в диапазоне от 1 до 10000 с максимальной суммой делителей.
Найти все натуральные числа из промежутка от К до L, у которых количество делителей превышает заданное число М.
Найти сумму четных делителей натурального числа N.
Найти все натуральные числа из промежутка от 1 до 200, у которых сумма четных делителей равна N.
Найти количество делителей натурального числа N. больших К.
Найти все целые корни уравнения ax3+bx2+cx+d=0 , где a,b,c,d – целые числа.
Даны целые числа p и q Получить все делители числа q , взаимно простые с p
Дано целое число n .Получить все простые делители этого числа
На интервале (1000, 9999) найти все простые числа, каждое из которых обладает тем свойством, что сумма первой и второй цифр в записи этого числа равна сумме третьей и четвертой цифр.
Даны натуральные числа К, Ь (К < Ь). Получить все простые числа I, удовлетворяющие неравенству: К < I < Ь, используя решето Эратосфена.
Дано натуральное число N > 2. Составить программу разложения этого числа на простые множители. Каждый простой множитель L должен быть выведен k раз, где k-натуральное число, такое, что N делится на Lk и не делится на Lk+1;
Дано натуральное число N > 2. Составить программу разложения этого числа на простые множители. Каждый простой множитель должен быть выведен один раз
Найти наибольший общий делитель ( НОД ) трех чисел, используя соотношение НОД(К,L,М) = НОД(НОД( К, L ), M) и алгоритм Евклида
Даны натуральные числа М, N. Получить все кратные им числа, меньшие МхN
Для натуральных чисел К и L определить наименьшее общее кратное (НОК), используя соотношение: НОД (K,L)=KL/ НОД (K,L) Даны M ( М > 2 ) натуральных чисел: N1,N2, ..., Nм. Вычислить НОД (N1,N2, ..., Nм ), используя соотношение НОД(N1,N2, ..., Nм)= НОД(НОД(N1,N2, ..., Nм-1 ), Nм ) и алгоритм Евклида. .
Найти все простые несократимые дроби, заключенные между 0 и 1, знаменатели которых не превышают 7 (дробь задается двумя натуральными числами - числителем и знаменателем )
. Составить программу сложения двух дробей. Результат сложения - несократимая дробь
Составить программу для нахождения всех совершенных чисел, меньших заданного числа N. Совершенным называется число, равное сумме всех своих положительных делителей ( включая единицу, но исключая само число ). Например, 28 - совершенное число, т.к. 28 = 1 + 2 + 4 + 7 + 14..
Даны натуральные числа N. М. Найти все пары натуральных дружественных чисел, лежащих в диапазоне от N до М. Два числа называются дружественными, если каждое из них равно сумме всех делителей другого ( само число в качестве делителя не рассматривается). .