Консультация № 161729
01.03.2009, 18:43
0.00 руб.
0 2 1
Уважаемые эксперты помогите с следующими задачами: 1)Два натуральных числа называются «дружественными», если каждое из них равно сумме всех делителей (кроме его самого) другого числа (например, числа 220 и 284). Найти все пары «дружественных чисел», которые не больше данного числа N 2)Определить, является ли заданная целая квадратная матрица /1-го порядка симметричной (относительно главной диагонали).Если сможете, помогите, пожалуйста

Обсуждение

Неизвестный
01.03.2009, 19:51
общий
это ответ
Здравствуйте, Vovko!
1е задание. C++
Код:

#include <limits>
#include <locale>
#include <iostream>
#include <iomanip>
#include <ctime>

using namespace std;

unsigned int sumDividers(unsigned int num)
{
unsigned int sum=0,
maximum=num/2+1;
for(unsigned int i=1;i<maximum;i++)
if(!(num%i))sum+=i;
return sum;
}

int main()
{
locale::global(locale("rus_rus.866"));
unsigned int N;
while(true)
{
wcout<<L"Введите число N:";
wcin>>N;
if(wcin.fail())
{
wcout<<L"Ошибочный ввод"<<endl;
wcin.clear();
wcin.ignore(numeric_limits<streamsize>::max(),L'\n');
}
else break;
}
wcout<<L"Дружественные числа от 1 до "<<N<<L":"<<endl;
clock_t startTime=clock();
for(unsigned int i=0;i<N;i++)
{
unsigned int num1=i+1,num2=sumDividers(num1);
if(num1<num2&&num2<=N&&sumDividers(num2)==num1)
{
wcout<<setw(10)<<num1<<L" и "<<setw(10)<<num2<<endl;
}
}
clock_t endTime=clock();
wcout<<L"Время работы:"
<<setprecision(3)<<static_cast<double>(endTime-startTime)/CLOCKS_PER_SEC<<L"(сек)"<<endl;
system("PAUSE");
return 0;
}

Пример работы:
Код:

Введите число N:200000
Дружественные числа от 1 до 200000:
220 и 284
1184 и 1210
2620 и 2924
5020 и 5564
6232 и 6368
10744 и 10856
12285 и 14595
17296 и 18416
63020 и 76084
66928 и 66992
67095 и 71145
69615 и 87633
79750 и 88730
100485 и 124155
122265 и 139815
122368 и 123152
141664 и 153176
142310 и 168730
171856 и 176336
176272 и 180848
Время работы:75.6(сек)
Неизвестный
01.03.2009, 23:24
общий
Матрица 1го порядка это какая то очень странная матрица.
Форма ответа