Forum studentów Informatyki Zaocznej na Uniwersytecie Opolskim
Użytkownik
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;
}
Offline
Offline