// Übung 2 - Aufgabe B (groesster gemeinsamer Teiler, befreundete Zahlen) // g++ -Wno-deprecated u2B.cc #include main() { int a,b, // zwei ganze Zahlen m,n,r,t, // Variablen im Euklidischen Algorithmus max_ab,i, // Max. von a und b, Laufvariable ma,mb, // Modulu von a, b bzgl. aktuellem Laufindex sum_a,sum_b; // Summation der Teiler; //-------------------------------------------------------------------- // Dateneingabe cout << endl; cout << " Eingabe der positiven ganzen Zahlen a und b " << endl; // Abgesicherte Eingabe fuer a do { cout << " a = "; cin >> a; } while ( a<=0 ); // Simple Eingabe fuer b cout << " b = "; cin >> b; cout << endl; //-------------------------------------------------------------------- // Euklidischer Algorithmus // Step 1 m = a; n = b; do { // Step 2 if ( m < n ) { t = m; m = n; n = t; } // Step 3 r = m-n; // Step 4 m = n; n = r; } // Step 5 while ( r != 0 ); // Ergebnisausgabe ggT(a,b) cout << " Groesster gemeinsamer Teiler von " << a << " und " << b << " ist " << m << endl << endl; //-------------------------------------------------------------------- // Jetzt der Test auf befreundete Zahlen // Summe der Teiler (mit 1, aber ohne a bzw. b) // Berechnung max(a,b)/2 (groesstmoeglicher Teiler) if ( a < b ) { max_ab = b/2; } else { max_ab = a/2; } sum_a = 0; sum_b = 0; for ( i=1; i<=max_ab; i++ ) { ma = a % i; if ( ma == 0 ) // Ist i ein Teiler?? { sum_a += i; } mb = b % i; if ( mb == 0 ) { sum_b += i; } } // Test, ob a bzw. b als Teiler auftauchen if ( a<=max_ab ) sum_a -= a; if ( b<=max_ab ) sum_b -= b; // Ergebnisausgabe befreundete Zahlen cout << endl << "Die Zahlen " << a << " und " << b << " sind "; if ( sum_a != b || sum_b != a) // keine befreundeten Zahlen? { cout << "keine "; } cout << "befreundeten Zahlen" << endl << endl; // cout << sum_a << " " << sum_b << endl; }