//Készítette:       Gregorics Tibor
//Dátum:            2009.01.24.
//Feladat:          Pozitív egész szám prímosztóit felsoroló objektum típusa

#include "primdivisor.h"

//Feladat: 	        Egy pozitív egész szám prímosztót felsoroló objektum létrehozása
//Bemenő adatok:    int i - amelynek a prímosztóit akarjuk felsorolni
//Kimenő adatok:    int n - pozitív egész szám (adattag)
//                  int d - n legkisebb prímosztója vagy 1
//Tevékenység:	    n:=i, d:=1
PrimDivisor::PrimDivisor(int i)
{
    n = i>0 ? i : 1;
}

//Feladat: 	        Az n szám első (legkisebb) prímosztójának előállítása
//Bemenő adatok:    int n - pozitív egész szám (adattag)
//Kimenő adatok:    int d - az n legkisebb prímosztója (adattag)
//Tevékenység:	    lásd lkpo()
void PrimDivisor::First()
{
    lkpo();
}

//Feladat: 	        Az n szám következő (d utáni) legkisebb prímosztójának előállítása
//Bemenő adatok:    int n - pozitív egész szám (adattag)
//                  int d - az n legkisebb prímosztója (adattag)
//Kimenő adatok:    int n - pozitív egész szám, amely osztja az n bemenő értékét, és
//                  amelynek prímosztói a d bemenő értékének kivételével ugyanazok,
//                  mint az n bemenő értékének prímosztói (adattag)
//                  int d - az módosult n legkisebb prímosztója (adattag)
//Tevékenység:	    Először leosztjuk az n számot a legkisebb prímosztójával (n:=n/d)
//                  majd az így módosult n számnak keressük a legkisebb prímosztóját (lásd lkpo())
void PrimDivisor::Next()
{
    while(n%d==0) n=n/d;
    lkpo();
}

//Feladat: 	        Az n szám első (legkisebb) prímosztójának előállítása
//Bemenő adatok:    int n - pozitív egész szám
//Kimenő adatok:    int d - válasz (adattag)
//Tevékenység:	    Ha n>1, akkor megkeresi (kiválasztás), az első egynél nagyobb osztóját,
//                  különben 1.
void PrimDivisor::lkpo()
{
    if (n>1) {
        d = 2;
        while(n%d!=0) ++d;
    }
}
