Консультация № 178954
06.06.2010, 19:01
0.00 руб.
0 2 1
Здравствуйте Уважаемые Эксперты. Очень нужна Ваша помощь в решении задачи! Буду краток.
Условие такое:
Найти на отрезке [n, k] натуральное число имеющее наибольшее колличество делителей.
.....
Задача на цикл. Заранее спасибо !!!
[ Borland C++ 5.02 ]

Обсуждение

Неизвестный
07.06.2010, 23:32
общий
это ответ
Здравствуйте, Dextrous.
Программа с комментариями приведена в приложении.
За неимением Borland C++ 5 программа проверена в MSVC++ 6.0.
Успехов!

Приложение:
/*
Найти на отрезке [n, k] натуральное число, имеющее наибольшее количество делителей.
Задача на цикл.
*/

#include <stdlib.h> // для system()
#include <iostream>
using namespace std;

int main()
{
long n1, n2;
cout << "Найти на отрезке [n, k] натуральное число, имеющее наибольшее количество делителей.\n"
"Введите меньшую границу: ";
cin >> n1;
cout << "Введите бОльшую границу: ";
cin >> n2;

while(1) {
// проверим правильность задания интервала
if( n1 <= 0 || n2 <= 0 ) { // поиск натурального числа
cout << "Границы должны быть натуральными числами.\n";
break;
}

if( n2 < n1 ) {
cout << "Границы заданы в обратном порядке. Обмениваем.\n";
long t = n1;
n1 = n2;
n2 = t;
}

long num; // число с максимальным кол-вом делителей
int nDivMax = 0; // максимальное кол-во делителей
long n = n1; // текущее проверяемое число

if( n1 == 1 ) { // обрабатываем особый случай, чтобы исключить проверку в цикле
nDivMax = 1;
num = 1;
n = n1 + 1;
}
for( ; n <= n2; ++n ) {
int nDiv = 2; // кол-во делителей проверяемого числа
// каждое число делится на 1 и само себя (особый случай (1) обработан перед циклом)

for( long div = n/2; div > 1; --div )
if( n % div == 0 ) ++nDiv;

if( nDiv > nDivMax ) {
nDivMax = nDiv;
num = n;
}
}

cout << "На отрезке [" << n1 << ", " << n2 << "] наибольшее количество делителей (" << nDivMax << ") у числа " << num << endl;
break;
}
system( "pause" );
return 0;
}
5
Неизвестный
09.06.2010, 12:48
общий
Большое спасибо
Форма ответа