unsigned long n(6), p(2);
void getPower(unsigned long , unsigned long*);
int main()
{
unsigned long power2(0), power3(0);
if(1 != n)
{
if(p%3) // Seit es atklaju sakaribu - ja skaitisanas sistemas baze bez atlikuma dalas ar num, tad lielakais num kapinatajs bus 0 ( power3(0) - inicializets jau sakuma)
getPower(3, &power3);
if(p%2) // Seit ari taa pati sakariba
getPower(2, &power2);
}
cout<<power2<<" "<<power3;
return 0;
}
//---------------------------------------------------------------------------
inline void getPower(unsigned long num, unsigned long* power)
{
unsigned long atl_next, atl, sum_atl, uniqueRemainders, loops, temp_atl, tempNum(num);
while (1)
{
sum_atl = temp_atl = atl_next = atl = p%num;
uniqueRemainders = 1;
cout<<"Atlikums = "<<atl_next<<endl;
while (temp_atl != (atl_next = (atl_next * atl) % num))
{
++uniqueRemainders;
sum_atl += atl_next;
cout<<"Atlikums = "<<atl_next<<endl;
}
cout<<"Cikla izmērs = "<<uniqueRemainders<<endl;
cout<<"Cikla summa = "<<sum_atl<<endl;
unsigned long loops_atl = n%uniqueRemainders; // Atlikumu nepilnā "cikla" iterāciju skaits
loops = n/uniqueRemainders; // Atlikumu pilno "ciklu" skaits
cout<<"Pilno ciklu skaits = "<<loops<<endl;
cout<<"Nepilnā cikla izmērs = "<<loops_atl<<endl;
sum_atl *= loops;
unsigned long real_loop_atl = sum_atl;
if (loops_atl)
{
atl_next = atl = p%num;
sum_atl += atl_next;
while(--loops_atl)
{
atl_next = (atl_next * atl) % num;
sum_atl += atl_next;
}
real_loop_atl = sum_atl - atl_next + 1;
}
cout<<"Aprēķinātā atilkumu summa = "<<sum_atl<<endl;
cout<<"Īstā atlikumu summa "<<real_loop_atl<<endl;
if( sum_atl % num )
{
cout<<"Nedalās ar "<<num<<endl;
break;
}
else
{
cout<<"Dalās ar "<<num<<endl;
*power += 1;
num *= tempNum;
}
}
}