Liczby zaprzyjaźnione to para różnych liczb naturalnych a i b. Suma dzielników właściwych liczby a wynosi b i analogicznie suma dzielników liczby b wynosi a.
Pierwszą parę liczb zaprzyjaźnionych podał Pitagoras: 220 i 284, ponieważ:
Do tej pory nie rozstrzygnięto ile jest liczb zaprzyjaźnionych oraz czy istnieje para o różnej parzystości. Oto pierwsze 5 par liczb zaprzyjaźnionych:
Liczba A | Liczba B |
---|---|
220 | 284 |
1 184 | 1 210 |
2 620 | 2 924 |
5 020 | 5 564 |
6 232 | 6 368 |
Każda liczba doskonała jest zaprzyjaźniona sama ze sobą.
Podczas kodowania pomocna będzie funkcja, która dla podanej liczby n obliczy sumę ich dzielników:
(1.) Funkcja zwróci nam liczbę całkowitą, która będzie sumą wszystkich dzielników właściwych liczby n. (2.) Zmienną suma ustalamy na 1, ponieważ dzieli każdą liczbę. (3.) Szukamy dzielników liczby n w zakresie [2, n/2] i (4.) jeśli i-ta liczba dzieli n to dodajemy ją do zmiennej suma. Po zakończeniu pętli (5.) zwracamy suma, która jest sumą dzielników liczby n.
Funkcja będzie przyjmowała dwa argumenty: liczbę a oraz b. Wynikiem funkcji będzie wartość logiczna.
(2.) Zwracamy wynik warunków nierówności liczb a i b, czy a to suma dzielników właściwych b oraz czy b to suma dzielników właściwych a.
Nasza funkcja będzie teraz przyjmowała tylko jeden argument: liczbę całkowitą a. Nasze zadanie polega na zwróceniu liczby do niej zaprzyjaźnionej. Jeśli jednak taka liczba nie istnieje to zwracamy 0.
(2.) Sumujemy liczbę dzielników danej liczby a i zakładamy, że jest to liczba bliźniacza b. (3.) Liczbę b zwracamy tylko, gdy a to suma dzielników b oraz a jest różne od b. Jeśli któryś z warunków nie jest spełniony to zwracamy 0.
Będziemy przeszukiwać kolejne liczby i wyliczać liczbę zaprzyjaźnioną. Funkcja nie będzie nic zwracać, ponieważ wyniki będziemy wypisywać bezpośrednio na konsole.
(2.) Deklarujemy zmienne t - do buforowania wyliczonej liczby zaprzyjaźnionej oraz i do przechowywania, którą liczbę sprawdzamy tj. pierwszą liczbę z pary liczb zaprzyjaźnionych. (3.) Dany argument n traktujemy jako odliczanie i wykonujemy pętle while dopóki n > 0. Dla każdego i wyliczamy liczbę zaprzyjaźnioną i sprawdzamy czy wynik jest różny od 0 - czyli czy istnieje liczba zaprzyjaźniona. Musimy jeszcze sprawdzić czy sprawdzana liczba i jest mniejsza od wyliczonej t (albo odwrotnie), bo będziemy wypisywać każdą parę liczba zaprzyjaźnionych dwukrotnie - w postaci a x b oraz b x a. Jeśli znajdziemy liczbę zaprzyjaźnioną to (4.) wypisujemy parę liczb oraz (5.) zmniejszamy ile jeszcze par liczb zaprzyjaźnionych szukamy.
Poniższa funkcja main() wczyta od użytkownika dwie liczby a i b, a potem wypisze czy liczby te są zaprzyjaźnione. Następnie na ekran zostanie wypisane pierwsze pięć par liczb zaprzyjaźnionych.
Dopisz funkcję podajZaprzyjazniona2(), aby korzystała z funkcji czyZaprzyjaznione(). Funkcja powinna zwrócić wartość 0 jeśli nie ma liczby zaprzyjaźnionej lub wartość liczby zaprzyjaźnionej
Dopisz funkcję podajnZaprzyjaznionychod() na podstawie podajnZaprzyjaznionych(), która rozpocznie wypisywanie par liczb zaprzyjaźnionych większych od określonej liczby od. Nagłówek funkcji powinien wyglądać tak:
Gdzie n określa ile kolejnych par liczb zaprzyjaźnionych o obu liczbach w parze większych lub równych od od ma być wypisanych.