[ create a new paste ] login | about

Link: http://codepad.org/w47Atjso    [ raw code | output | fork ]

C++, pasted on Aug 7:
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;
              
         }
  }

}


Output:
Atlikums = 2
Atlikums = 1
Cikla izmērs = 2
Cikla summa = 3
Pilno ciklu skaits = 3
Nepilnā cikla izmērs = 0
Aprēķinātā atilkumu summa = 9
Īstā atlikumu summa 9
Dalās ar  3
Atlikums = 2
Atlikums = 4
Atlikums = 8
Atlikums = 7
Atlikums = 5
Atlikums = 1
Cikla izmērs = 6
Cikla summa = 27
Pilno ciklu skaits = 1
Nepilnā cikla izmērs = 0
Aprēķinātā atilkumu summa = 27
Īstā atlikumu summa 27
Dalās ar  9
Atlikums = 2
Atlikums = 4
Atlikums = 8
Atlikums = 16
Atlikums = 5
Atlikums = 10
Atlikums = 20
Atlikums = 13
Atlikums = 26
Atlikums = 25
Atlikums = 23
Atlikums = 19
Atlikums = 11
Atlikums = 22
Atlikums = 17
Atlikums = 7
Atlikums = 14
Atlikums = 1
Cikla izmērs = 18
Cikla summa = 243
Pilno ciklu skaits = 0
Nepilnā cikla izmērs = 6
Aprēķinātā atilkumu summa = 45
Īstā atlikumu summa 36
Nedalās ar  27
0 2


Create a new paste based on this one


Comments: