Questo sito utilizza cookies solo per scopi di autenticazione sul sito e nient'altro. Nessuna informazione personale viene tracciata. Leggi l'informativa sui cookies.
Username: Password: oppure
FattorizzazioneBigN - FattorizzazioneBigN.c

FattorizzazioneBigN.c

Caricato da:
Scarica il programma completo

  1. #include <stdio.h>
  2. #include <stdlib.h>
  3. typedef enum _bign
  4. {
  5.     BIGN_MAX=9223372036854775807,
  6.     BIGN_MIN=-BIGN_MAX-1
  7. }BigN;//Equivale ad un __int64 (long long(long long int))
  8. BigN minsotm(BigN n,BigN min)
  9. {
  10.     if(n<3)return n;
  11.     BigN m=min;
  12.     while(m<=(n/m))
  13.     {
  14.         if(!(n%m))return m;
  15.         m++;
  16.     }
  17.     return n;
  18. }
  19. int up(int c)
  20. {
  21.     return c>='a'&&c<='z'?c-32:c;
  22. }    
  23. int ispace(int c)
  24. {
  25.     return c==' '||c=='\t'||c=='\n';
  26. }    
  27. int isnum(int c)
  28. {
  29.     return c>='0'&&c<='9';
  30. }    
  31. BigN read(unsigned base)
  32. {
  33.     if(base<2)abort();
  34.    
  35.     BigN res=0;
  36.     char buf;
  37.     unsigned _0=0;
  38.     while(ispace(buf=getchar()));
  39.     if(_0=(buf=='-'))buf=getchar();        
  40.     do
  41.     {
  42.         if(isnum(buf))
  43.             res=(res*base)+(buf-'0');
  44.         else if(isalpha(buf)&&base>(up(buf)-'A'+10))
  45.             res=(res*base)+(up(buf)-'A'+10);
  46.         else if(buf!='\n')
  47.             abort();
  48.     }while(buf!='\n'&&(buf=getchar()));
  49.     ungetch(buf);
  50.     return _0?-res:res;
  51. }
  52. void print(BigN n, int base)
  53. {
  54.     if(n<0)
  55.     {
  56.         putchar('-');
  57.         print(-n,base);
  58.     }else
  59.     {
  60.         long i=n%base;
  61.         if(n/base)print(n/base,base);
  62.         if(i<10)
  63.         putchar(i+'0');
  64.         else
  65.         putchar(i+('A'-10));
  66.     }    
  67. }
  68. int main(int argc, char **args)
  69. {
  70.     BigN n=0,div=2;
  71.     printf("Inserisci un numero : ");
  72.     n=read(10);
  73.     while(n!=1)
  74.     {
  75.         print(div=minsotm(n,div),10);
  76.         putchar('\n');
  77.         n/=div;
  78.     }
  79.     getch();getch();
  80. }