#include <stdio.h>
#include <stdlib.h>
typedef enum _bign
{
BIGN_MAX=9223372036854775807,
BIGN_MIN=-BIGN_MAX-1
}BigN;//Equivale ad un __int64 (long long(long long int))
BigN minsotm(BigN n,BigN min)
{
if(n<3)return n;
BigN m=min;
while(m<=(n/m))
{
if(!(n%m))return m;
m++;
}
return n;
}
int up(int c)
{
return c>='a'&&c<='z'?c-32:c;
}
int ispace(int c)
{
return c==' '||c=='\t'||c=='\n';
}
int isnum(int c)
{
return c>='0'&&c<='9';
}
BigN read(unsigned base)
{
if(base<2)abort();
BigN res=0;
char buf;
unsigned _0=0;
while(ispace(buf=getchar()));
if(_0=(buf=='-'))buf=getchar();
do
{
if(isnum(buf))
res=(res*base)+(buf-'0');
else if(isalpha(buf)&&base>(up(buf)-'A'+10))
res=(res*base)+(up(buf)-'A'+10);
else if(buf!='\n')
abort();
}while(buf!='\n'&&(buf=getchar()));
ungetch(buf);
return _0?-res:res;
}
void print(BigN n, int base)
{
if(n<0)
{
putchar('-');
print(-n,base);
}else
{
long i=n%base;
if(n/base)print(n/base,base);
if(i<10)
putchar(i+'0');
else
putchar(i+('A'-10));
}
}
int main(int argc, char **args)
{
BigN n=0,div=2;
printf("Inserisci un numero : ");
n=read(10);
while(n!=1)
{
print(div=minsotm(n,div),10);
putchar('\n');
n/=div;
}
getch();getch();
}