wieslawski - 2010-12-16 14:18:33

Funkcja za argument bierze sprawdzaną liczbę (n), przez referencję zwróci liczbę kolejnych liczb pierwszych (ile), a zwróci wskaźnik na tablicę kolejnych potęg.

int *kanoniczny(int n, int &ile)
{
    int *tab;
    int pierw = int(sqrt(n));
    int spr = 2;
    int ile_pierw = 0;
    if( n == 1)
    {
        tab = new int[1];
        *tab = 0;
        ile = 1;
        return tab;
    }

    else
    {
        while( n > 1 )
        {
       
            bool czy_pierw = true;
            for (int i = 2; i <= int(sqrt(spr)) && czy_pierw == true; i++)
            {
                if(spr % i == 0)
                czy_pierw = false;
            }
           
            if(czy_pierw == true)
            {
                int *tab_zam = new int[ile_pierw];
                for (int i = 0; i < ile_pierw; i++)
                *(tab_zam + i) = *(tab + i);
                ile_pierw++;
                tab = new int[ile_pierw];
               
                for (int i = 0; i < ile_pierw - 1; i++)
                *(tab + i) = *(tab_zam + i);
               
                *(tab + (ile_pierw - 1)) = 0;
               
                while( n % spr == 0 )
                {
                    n = n/spr;
                    *(tab + (ile_pierw - 1)) += 1 ;
                }
            }
            if (spr <= pierw) spr++;
            else spr = n;
        }
    }
   
    ile = ile_pierw;
    return tab;
}

ciemak666 - 2010-12-16 16:40:16

o dzięki wielkie !!

www.fifa07online.pun.pl www.shippuudenshinobi.pun.pl www.slavoyka08.pun.pl www.shelterofpower.pun.pl www.pro-serwer.pun.pl