#include <stdio.h>
#include <stdlib.h>
#include <math.h>
#include <conio.h>

main (int cant, char *vec[])
{
  unsigned long num, cotasup, _num, c, factores[31], e;
  int primo, i, j, pos, k; 
  FILE *arch;
  char *ptr;

  for (j=0; j<=30; j++)
    factores[j]=0;

  if (cant!=1 && cant!=2)
  {
    puts("<<ERROR: El comando debe ser PRIMOS NUMERO>>");
    exit(0);
  }

  if (cant==1)
  {
    if ((arch=fopen("primos.txt","at"))==NULL)
    {
      puts("<<ERROR al intentar crear archivo>>");
      exit(0);
    }
    fputs("2\n",arch);
    for (c=3; c<=1000000; c+=2)
    {
      gotoxy(1,1);
      printf("calculando...%lu",c);
      cotasup= floor(sqrt(c));
      primo=1;
      for (i=2; i<=cotasup && primo; i++)
      {
	if (c % i == 0)
	  primo=0;
      }
      if (primo)
	fprintf(arch,"%lu \n",c);
    }
    fclose(arch);
  }
  else
  {
    num=strtoul(vec[1],&ptr,10);
    k=0;
    primo=1;
    _num=num;
    cotasup= floor(sqrt(num));

    for (e=2; e<=cotasup; e++)
    {
      if (_num % e == 0)
      {
	primo=0;
	_num= _num/e;
	factores[k]=e;
	k++;
	e=1;
      }
      if (_num!=1)
	factores[k]= _num;
    }
    if (primo)
      printf("%lu es primo.\n", num);
    else
    {
      printf("%lu no es primo.", num);
      printf("Su factorizacion prima es:  ");
      for (pos=0; factores[pos]!=0; pos++)
	printf("%lu ", factores[pos]);
      printf("\n");
    }
  }
  return(0);
}