home *** CD-ROM | disk | FTP | other *** search
/ The Best of Mecomp Multimedia 2 / MECOMP-CD-II.iso / amiga / tools / libs / bignum / examples / suite / suite.c < prev    next >
Encoding:
C/C++ Source or Header  |  1997-01-21  |  1.2 KB  |  99 lines

  1. #include <stdio.h>
  2. #include <stdlib.h>
  3. #include <string.h>
  4. #include <proto/BigNum.h>
  5. #include <proto/exec.h>
  6.  
  7. #include "clock.h"
  8.  
  9. unsigned long jmax=0;
  10.  
  11. #define SIZE 1000000
  12.  
  13. struct Library *BigNumBase;
  14.  
  15. void Test(int i)
  16. {
  17.  unsigned int j=0;
  18.  PtrBigNum z,Un;
  19.  
  20.  z=BigNumInit();
  21.  Un=BigNumInit();
  22.  BigNumIntToBigNum(Un,1);
  23.  BigNumIntToBigNum(z,i);
  24.  while(BigNumFastCompare(z,Un))
  25.  {
  26.   if(BigNumIsEven(z))
  27.    BigNumRightShift(z,1);
  28.   else
  29.   {
  30.    BigNumDigitMul(z,3);
  31.    BigNumDigitAdd(z,1);
  32.   }
  33.   j++;
  34.   if(j>jmax)
  35.   {
  36.    jmax=j;
  37.    printf("%d\t%d *\n",i,j);
  38.    break;
  39.   }
  40.  }
  41.  BigNumFree(2);
  42. }
  43.  
  44. main(char argc,char **argv)
  45. {
  46.  unsigned int i,j,k,mm,*buf,zz;
  47.  
  48.  if(!(buf=calloc(SIZE,4)))
  49.   exit(0);
  50.  if(!(BigNumBase=OpenLibrary("BigNum.library",37)))
  51.  {
  52.   free(buf);
  53.   exit(0);
  54.  }
  55.  mm=-1;
  56.  mm/=3;
  57.  timer(t1);
  58.  if(argc==2)
  59.   zz=atoi(argv[1]);
  60.  else
  61.   zz=100000;
  62.  for(k=3;k<zz;k+=2)
  63.  {
  64.   i=0;
  65.   j=k;
  66.   while(j!=1)
  67.   {
  68.    if((j<SIZE)&&(buf[j]))
  69.    {
  70.     i+=buf[j];
  71.     break;
  72.    }
  73.    if(j&1)
  74.    {
  75.     if(j>=mm)
  76.     {
  77.      Test(k);;
  78.      break;
  79.     }
  80.     j=j+j+j+1;
  81.    }
  82.    else
  83.     j>>=1;
  84.    i++;
  85.   }
  86.   if(i>jmax)
  87.   {
  88.    printf("%u\t%u\n",k,i);
  89.    jmax=i;
  90.   }
  91.   if(k<SIZE)
  92.    buf[k]=i;
  93.  }
  94.  timer(t2);
  95.  diff(t1,t2);
  96.  CloseLibrary((struct Library *)BigNumBase);
  97.  free(buf);
  98. }
  99.