All pastes #2076866 Raw Edit

Untitled

public text v1 · immutable
#2076866 ·published 2011-06-08 18:22 UTC
rendered paste body
#include <stdio.h>
#include <stdlib.h>

// calculates potenz by basis and exponent
unsigned long long int binaryEpansion(unsigned long long int basis, unsigned long long int exponent)
{
  unsigned long long int result = 1;
  for(int bit = (sizeof(long long int) - 1); bit >= 0; bit--)
  {
    result *= result;
    if ( (exponent & (1 << bit)) != 0 )
    {
      result *= basis;
    }
  }
  return result;
}

// calculates (potenz by 'basis' and 'exponent') modulo 'mod'
unsigned long long int binaryEpansion(unsigned long long int basis, unsigned long long int exponent, unsigned long long int mod)
{
  unsigned long long int result = 1;
  for(int bit = (sizeof(unsigned long long int) - 1); bit >= 0; bit--)
  {
    result *= result;
    if ( (exponent & (1 << bit)) != 0 )
    {
      result *= basis;
    }
    result = result % mod;
  }
  return result;
}

int main(int argc, char** argv)
{
  if ( argc < 3 || argc > 4 )
  {
    printf("Usage: %s basis exponent [modulo]\n", argv[0]);
    exit(1);
  }

  // parse input

  unsigned long long int param[3] = {0,0,0};
  int size=0;
  for(int arg = 1; arg < argc; arg++)
  {
    size = 0;
    while (argv[arg][size] != 0)
    {
      size++;
    }
    // for (int pos = 0; argv[arg][pos] != 0; pos++)  // for(int pos = size; pos >= 0; pos--)
    for(int pos = size-1; pos >= 0; pos--)
    {
      param[arg-1] += ((argv[arg][pos] - '0') * binaryEpansion(10, size-pos-1));
    }
  }

  // print result(s)
  if (argc == 4) printf("parameter: %llu; %llu; %llu\nergebnis: %llx\n", param[0],param[1],param[2], binaryEpansion(param[0], param[1], param[2]));
  if (argc == 3) printf("parameter: %llu; %llu\nergebnis: %llu\n", param[0],param[1], binaryEpansion(param[0], param[1]));
}