//Készítette:    Gregorics Tibor
//Dátum:         2011.12.27.
//Feladat:       Valódi osztók száma

#include <iostream>
#include <string>

using namespace std;

int Count(int n);

//Feladat:       Pozitív egész szám valódi osztóinak száma
//Bemenő adatok: int n              - adott pozitív egész szám
//Kimenő adatok: természetes szám   - az n valódi osztónak száma
//Tevékenység:	 Beolvas egy pozitív egész számot (ciklikus ellenőrzés),
//               kiszámolja a valódi osztók számát (függvény hívás),
//               és kiírja az eredményt; mindez ciklikusan ismételhető
int  main()
{
    setlocale(LC_ALL,"Hun");

    cout << "Valódi osztók száma\n";
    string tmp;
    char ch = 'i';
    do{
        int n;
        cout << "\nAdjon meg egy pozitív egész számot:  ";
        cin >> n; getline(cin, tmp);
        if(cin.fail() || n<=0){
            cout << "Pozitiv egész szám kell!\n";
            if(cin.fail()) { cin.clear(); getline(cin, tmp); }
            continue;
        }

        cout << "A(z) " << n << " valódi osztóinak száma: "
             << Count(n) << endl;

        cout << "\nAkarja folytatni? (I/N)";;
        cin >> ch; getline(cin, tmp);

   }while( ch!='n' && ch!='N');

   return 0;
}

//Feladat:       Pozitív egész egész szám valódi osztóinak száma
//Bemenő adatok: int n  - adott pozitív egész szám
//Kimenő adatok: int s  - az n valódi osztónak száma, természetes szám
//Tevékenység:	 n osztóinak számlálása a 2 .. n/2 intervalluman
int Count(int n)
{
    int c = 0;
    for(int i=2; i<=n/2; ++i){
        if(n%i==0) ++c;
    }
    return c;
}
