This repository has been archived on 2024-09-24. You can view files and clone it, but cannot push or open issues or pull requests.
Schule/Mathe/befreundete Zahlen.cpp

71 lines
1.5 KiB
C++
Raw Normal View History

2017-04-14 16:03:46 +02:00
#include<conio.h>
#include<iostream>
#include<sstream>
#include<new>
//In Zusammenarbeit mit Nils Werner
//Zwei verschiedene nat<61>rliche Zahlen,
//von denen wechselseitig jeweils eine Zahl gleich der Summe der echten Teiler der anderen Zahl ist,
//bilden ein Paar befreundeter Zahlen.
int divSum(int number);
void program();
int main()
{
2017-04-14 16:35:00 +02:00
std::cout<< "Gib ein Limit ein: ";
2017-04-14 16:03:46 +02:00
program();
std::cout << "\n\nProgrammende!";
getch();
return(0);
}
int divSum(int number)
{
int sum = 0;
for (int idx = 1; idx*2 <= number; idx++) if(number%idx==0) sum += idx;
return (sum);
}
void program()
{
unsigned long long limit = 0;
std::string input;
2017-04-14 16:35:00 +02:00
do
{
2017-04-14 16:03:46 +02:00
getline(std::cin, input);
std::stringstream(input)>>limit;
2017-04-14 16:35:00 +02:00
if(limit>=ULLONG_MAX || limit<0) std::cerr << "Error: Dieses Limit ist nicht m\x94glich. Gib ein anderes Limit ein: ";
2017-04-14 16:03:46 +02:00
}while(limit>=ULLONG_MAX || limit<0);
try
{
unsigned long long *number = new unsigned long long[limit+1];
std::cout<< "befreundete Zahlen sind:\n";
for (int idx = 220; idx<= limit; idx++)
{
number[idx] = divSum(idx);
if(idx > number[idx]) if (idx==number[number[idx]]) std::cout << idx << " und " << number[idx] << "\n";
}
delete[] number;
}
catch(std::bad_alloc& ba)
{
2017-04-14 16:35:00 +02:00
std::cerr << "Error: Es konnte kein Array dieser Gr\x94\xE1 \be erstellt werden. Gib ein anderes Limit ein: ";
program();
}
catch(std::exception& e)
{
std::cerr << "Error: Beim Erstellen des Arrays ist ein unbekannter Fehler aufgetreten. Gib ein anderes Limit ein: ";
2017-04-14 16:03:46 +02:00
program();
}
}