Napisać program w C++ znajdujący 10 najmniejszych par liczb zaprzyjaźnionych. Liczby zaprzyjaźnione to różnych liczb naturalnych takich, że suma dzielników każdej z tych liczb równa się drugiej (nie licząc dzielników przez samą siebie) Pilne, czas do 8:00 rano. Punkty do negocjacji jeśli będzie trzeba :p
luke14444
W zalaczniku kod rozwiazania. Wynik sprawdizlem z lista takich liczb i wydaje sie poprawny. Wyszlo mi rozwiazanie zwracające 10 najmniejszych par, co do wartosci wiekszej z tych dwoch liczb.
Wynik: para 1: 220 i 284 para 2: 1184 i 1210 para 3: 2620 i 2924 para 4: 5020 i 5564 para 5: 6232 i 6368 para 6: 10744 i 10856 para 7: 12285 i 14595 para 8: 17296 i 18416 para 9: 66928 i 66992 para 10: 67095 i 71145
1 votes Thanks 1
Varvadius
#include <iostream> using namespace std;
int sum_dziel(int x) //funkcja znajduje i sumuje dzielniki danej liczby { int wynik=0,z=1; if(x==1) wynik=1; else { while (x!=z) { if(x%z==0) { wynik=wynik+z; z++; } else z++; }; } return wynik; }
void porownanie() //funkcja porownuje liczby aby znalezc te zaprzyjaznione 10 razy { int l1=1,l2,f1=0,f2=0,f3=1; for(int i=0;i<22;i++) { do { l2=sum_dziel(l1); if((sum_dziel(l2)==l1)&&(l2!=1)&&(l1!=l2)) { if(f3%2!=0) { cout<<l1<<" oraz "<<l2<<endl; } f1++; } else l1++; } while(f1!=f2); l1++; f2++; f3++; } }
Wynik sprawdizlem z lista takich liczb i wydaje sie poprawny.
Wyszlo mi rozwiazanie zwracające 10 najmniejszych par, co do wartosci wiekszej z tych dwoch liczb.
Wynik:
para 1: 220 i 284
para 2: 1184 i 1210
para 3: 2620 i 2924
para 4: 5020 i 5564
para 5: 6232 i 6368
para 6: 10744 i 10856
para 7: 12285 i 14595
para 8: 17296 i 18416
para 9: 66928 i 66992
para 10: 67095 i 71145
using namespace std;
int sum_dziel(int x) //funkcja znajduje i sumuje dzielniki danej liczby
{
int wynik=0,z=1;
if(x==1) wynik=1;
else
{
while (x!=z)
{
if(x%z==0)
{
wynik=wynik+z;
z++;
} else z++;
};
}
return wynik;
}
void porownanie() //funkcja porownuje liczby aby znalezc te zaprzyjaznione 10 razy
{
int l1=1,l2,f1=0,f2=0,f3=1;
for(int i=0;i<22;i++)
{
do
{
l2=sum_dziel(l1);
if((sum_dziel(l2)==l1)&&(l2!=1)&&(l1!=l2))
{
if(f3%2!=0)
{
cout<<l1<<" oraz "<<l2<<endl;
}
f1++;
} else l1++;
} while(f1!=f2);
l1++;
f2++;
f3++;
}
}
int main()
{
porownanie();
return 0;
}