große Optimierung
This commit is contained in:
parent
cacbe74855
commit
ff7fef432a
2 changed files with 64 additions and 45 deletions
64
Mathe/befreundete Zahlen.cpp
Normal file
64
Mathe/befreundete Zahlen.cpp
Normal file
|
@ -0,0 +1,64 @@
|
||||||
|
#include<conio.h>
|
||||||
|
#include<iostream>
|
||||||
|
#include<sstream>
|
||||||
|
#include<new>
|
||||||
|
|
||||||
|
//In Zusammenarbeit mit Nils Werner
|
||||||
|
|
||||||
|
//Zwei verschiedene natü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()
|
||||||
|
{
|
||||||
|
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;
|
||||||
|
|
||||||
|
do{
|
||||||
|
std::cout<< "Gib ein Limit ein: ";
|
||||||
|
getline(std::cin, input);
|
||||||
|
std::stringstream(input)>>limit;
|
||||||
|
if(limit>=ULLONG_MAX || limit<0) std::cerr << "Error: Dieses Limit ist nicht m\x94glich. ";
|
||||||
|
}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)
|
||||||
|
{
|
||||||
|
std::cerr << "Error: Es konnte kein Array dieser Gr\x94\xE1 \be erstellt werden. ";
|
||||||
|
program();
|
||||||
|
}
|
||||||
|
|
||||||
|
}
|
|
@ -1,45 +0,0 @@
|
||||||
#include<iostream>
|
|
||||||
#include<conio.h>
|
|
||||||
#include<string>
|
|
||||||
#include<sstream>
|
|
||||||
|
|
||||||
//Zwei verschiedene natürliche Zahlen,
|
|
||||||
//von denen wechselseitig jeweils eine Zahl gleich der Summe der echten Teiler der anderen Zahl ist,
|
|
||||||
//bilden ein Paar befreundeter Zahlen.
|
|
||||||
|
|
||||||
int main()
|
|
||||||
{
|
|
||||||
std::string input;
|
|
||||||
unsigned int amount = 0;
|
|
||||||
|
|
||||||
std::cout << "Gib an bis zu welcher Zahl nach befreundeten Zahlen gesucht werden soll: ";
|
|
||||||
getline(std::cin, input);
|
|
||||||
std::stringstream(input) >> amount;
|
|
||||||
|
|
||||||
if(amount<284)
|
|
||||||
{
|
|
||||||
std::cout << "\nEs wurden keine befreundeten Zahlen gefunden.";
|
|
||||||
getch();
|
|
||||||
return(0);
|
|
||||||
}
|
|
||||||
|
|
||||||
std::cout << "\nBefreundete Zahlen sind:\n";
|
|
||||||
|
|
||||||
amount -= 219;
|
|
||||||
|
|
||||||
unsigned int *number = new unsigned int[amount];
|
|
||||||
|
|
||||||
for(unsigned long long idx = 0; idx<amount; idx++)
|
|
||||||
{
|
|
||||||
number[idx] = 0;
|
|
||||||
|
|
||||||
for(unsigned long long factor = 1; factor*2<=idx+220; factor++) if((idx+220)%factor==0) number[idx] += factor;
|
|
||||||
|
|
||||||
if(number[idx]<idx+220 && number[idx]>=220 && number[number[idx]-220]==idx+220) std::cout << number[idx] << " und " << number[number[idx]-220] << "\n";
|
|
||||||
}
|
|
||||||
|
|
||||||
delete[] number;
|
|
||||||
|
|
||||||
getch();
|
|
||||||
return(0);
|
|
||||||
}
|
|
Reference in a new issue