Liczby skojarzone. Zadanie maturalne 2016

0

Witam.
Spróbowałem zrobić zadanie maturalne o liczbach skojarzonych

Dwie różne liczby całkowite a i b większe od 1 nazwiemy skojarzonymi, jeśli suma
wszystkich różnych dodatnich dzielników a mniejszych od a jest równa b+1, a suma
wszystkich różnych dodatnich dzielników b mniejszych od b jest równa a+1. <

Na moje oko (początkującego programisty wszystko jest dobrze, ale wynik jest zawsze "NIE". Od godziny nie mogę się dopatrzeć błędu.

int s, a, b, n;
	n = 1;
	s = 0;

	cin >> a;
	while (a<n)
	{
		if (a / n % 0)
		{ 
			s = s + n;
			n++;
		}
		else
			n++;
	}
	b = s + 1;
	n = 1;
	s = 0;
	while (b<n)
	{
		if (b / n % 0)
		{
			s = s + n;
			n++;
		}
		else
			n++;
	}
	if (a == s + 1)
		cout << b;
	else
		cout << "NIE";

Z góry dziękuję za pomoc i ewentualne uwagi dotyczące zapisu lub inne rozwiązania.

1

Jeżeli suma dzielników a ma być równa b+1, to b = suma a - 1 a Ty robisz odwrotnie, to jest:

b = s + 1; // Źle
// Powinno być:
b = s - 1;

Zmień również ostatniego IF na:

if(a == (s - 1))

Dodatkowo aby zobaczyć czy jest reszta zdzielenia musisz zrobić a % n nie a / n % 0 po dzielisz a / n przez 0.
Więc aby zobaczyć czy jest dzielnikiem:

if((a % n) == 0)

I jak już tu jesteśmy, jeżeli n inkrementujesz niezależnie od ifa to wywal n++ stamtąd poza if, czyli:

if ((a % n) == 0)
{
	s += n;
}
n++;

EDIT:
A, zapomniałem jeszcze o jednym:

Treść zadania mówi, że dopóki dzielnik jest mniejszy od a (czy b), tymczasem w while robisz odwrotnie - dopóki a jest mniejsze od n.
Czyli Twoje pętle powinny wyglądać tak:

while(n < a) //Lub b
0

@atmal: Zmieniłem wszystko o czym mówiłeś. Jedyne co się zmieniło to komputer "myśli" nad tym jakieś 10/15 sekund (możliwe ze jak na tak prosty program tyle myślał?). Tak czy inaczej nadal jest ten sam błąd.

{
	int s, a, b, n;
	n = 1;
	s = 0;

	cin >> a;
	while (a<n)
	{
		if ((a % n) == 0)
		{ 
			s += n;
		}
		    n++;
	}
	b = s - 1;
	n = 1;
	s = 0;
	while (b<n)
	{
		if ((b % n) == 0)
		{
			s = s + n;
		}
			n++;
		
	}
	if (a == (s - 1))
		cout << b;
	else
		cout << "NIE";
	getchar(); getchar();
    return 0;

@Edit:
Nie zauważyłem twojej edycji. Program działa i już wiem jakie błędy robiłem :D. Wielkie dzięki.

1 użytkowników online, w tym zalogowanych: 0, gości: 1