[C++] Liczby zaprzyjaźnione od 1 do n.

lucas7
Użytkownik
Użytkownik
Posty: 76
Rejestracja: 8 maja 2011, o 15:38
Płeć: Mężczyzna
Podziękował: 13 razy

[C++] Liczby zaprzyjaźnione od 1 do n.

Post autor: lucas7 »

Hej, mógłby mi ktoś powiedzieć dlaczego ten program nie działa? Wypisuje cały czas 6, 15, niezależnie od tego jaki zakres podam

Kod: Zaznacz cały

//program szuka liczb zaprzyjaźnionych w okreslonym przedziale
#include <iostream>
#include<cstdlib>
using namespace std;
int main () {
   int licz1, podz1, podz2, i, k, maks;
   cin >> maks; // przedzial

   i = 1; //kolejne podzielniki liczby1
   k = 1; //kolejne podzielniki liczby2
   podz1 = 0; //suma podzielnikow liczby1
   podz2 = 0; //suma podzielnikow liczby2
  
   for(licz1 = 2; licz1 < maks; licz1++) {
       while(i <= licz1/2) { //sprawdzamy podzielniki tylko do polowy liczby
           if(licz1 % i == 0) {
	         podz1 = podz1 + i; // sumujemy podzielniki
	       }
	       i = i + 1;
     	}
    	//sprawdzamy czy nowa liczba jest liczba zaprzyjazniona
	
       while(k <= podz1/2) {
           if(podz1 % k == 0) { 
	       podz2 = podz2 + k; // sumujemy podzielniki
	       }
	       k = k + 1;
        }
   
       if(podz2 == licz1 && podz1 < maks) { //jesli suma podzielnikow nowej liczby rowna sie
          cout << licz1 << " " << podz1 << endl;
	                                        //pierwszej liczbie to dwie liczby sa zaprz
       
	   }
	}
 	return 0;
}
	
Kartezjusz
Użytkownik
Użytkownik
Posty: 7330
Rejestracja: 14 lut 2008, o 08:31
Płeć: Mężczyzna
Lokalizacja: Z Bielskia-Białej
Podziękował: 6 razy
Pomógł: 961 razy

[C++] Liczby zaprzyjaźnione od 1 do n.

Post autor: Kartezjusz »

Rozpatrujesz tylko jedną strone tego zaprzyjaźnienia. W drugą stronę też musi tak działać.
Pierwsza para liczb zaprzyjaźnionych to dopiero 220 i 284.
lucas7
Użytkownik
Użytkownik
Posty: 76
Rejestracja: 8 maja 2011, o 15:38
Płeć: Mężczyzna
Podziękował: 13 razy

[C++] Liczby zaprzyjaźnione od 1 do n.

Post autor: lucas7 »

Tzn? Bo jeśli nie wybieramy zakresu tylko wczytujemy jakąś liczbę to ten kod po usunięciu fora działa, dla 220, wypisze 284. Dodałem ten for i coś nie chce działać..Chociaż teraz zauważylem, że dla 6 wypisuje 6. Właściwie to czemu nie mogą być? Warunek jest taki, że mają być dwie różne liczby?

Kod: Zaznacz cały

//program szuka liczb zaprzyjaźnionych w okreslonym przedziale
#include <iostream>
using namespace std;
int main () {
   int licz1, podz1, podz2, i, k;
   cin >> licz1; //wczytuje liczbe
   i = 1; //kolejne podzielniki liczby1
   k = 1; //kolejne podzielniki liczby 2
   podz1 = 0; //suma podzielnikow liczby1
   podz2 = 0; //suma podzielnikow liczby2
  
   while(i <= licz1/2) { //sprawdzamy podzielniki tylko do polowy liczby
       if(licz1 % i == 0) {
	      podz1 = podz1 + i; // sumujemy podzielniki
	   }
	   i = i + 1;
	}
	//sprawdzamy czy nowa liczba jest liczba zaprzyjazniona
	
   while(k <= podz1/2) {
       if(podz1 % k == 0) { 
	      podz2 = podz2 + k; // sumujemy podzielniki
	   }
	   k = k + 1;
   }
   
   if(podz2 == licz1) { //jesli suma podzielnikow nowej liczby rowna sie
                        //pierwszej liczbie to dwie liczby sa zaprz
      cout << "Liczba zaprzyjazniona to: " << podz1 << endl;
	}
	else {
	cout << "brak";
	}
	return 0;
}
	
Awatar użytkownika
kropka+
Użytkownik
Użytkownik
Posty: 4389
Rejestracja: 16 wrz 2010, o 14:54
Płeć: Kobieta
Lokalizacja: Łódź
Podziękował: 1 raz
Pomógł: 787 razy

[C++] Liczby zaprzyjaźnione od 1 do n.

Post autor: kropka+ »

Tak, muszą być różne.
Co do pary \(\displaystyle{ (6,6)}\) to nie tylko nie są różne ale suma podzielników też nie jest równa \(\displaystyle{ 6}\)
ODPOWIEDZ