Witam.
Mam problem z zadaniem badającym, czy liczba jest doskonała, a w wypadku gdy nie jest, wypisująca czy suma dzielników jest zbyt wielka czy niedostateczna.
Na razie mam tyle:
#include <iostream>
#include <cmath>
using namespace std;
void dos(int x)
{
int suma=0;
int p=sqrt(x);
for(int i=1;i<=p;i++)
if(x%i==0) {
suma+=i;
}
if (suma==x)
cout <<"OK"<<endl;
else if (suma>x)
cout <<"WIELKA"<<endl;
else
cout <<"NIEDOSTATECZNA"<<endl;
}
int main()
{
int n;
cin>>n;
for(int i=0;i<n;i++){
int x;
cin >> x;
dos(x);
}
return 0;
}
Wiem, że funkcja sprawdzająca dzielniki musi działać do pierwiastka z liczby (przy połowie sumy za długi czas wykonywania). Jednakże z nieznanego mi powodu w przypadku takiego użycia wychodzą błędne wyniki:
Dla 6 - niedostateczne (zamiast OK)
Dla 9 - niedostateczne (prawidłowo)
Dla 12 - niedostateczne (zamiast WIELKA)
Proszę o pomoc w znalezieniu i naprawieniu błędu