[comp.os.minix] Program to print prime factors of a number

ast@botter.UUCP (08/26/87)

/* factor - factor a number		Author: Andy Tanenbaum  */

main(argc, argv)
int argc;
char *argv[];
{

  long i, n, flag = 0, first(), atol();
  
  n = atol(argv[1]);
  if (argc != 2 || n < 2) {
	printf("Usage: factor n   (2 <= n < 2**31)\n");
	exit(1);
  }
  if (n == 2) {
	printf("2 is a prime\n");
	exit(0);
  }

  while (1) {
	i = first(n);
	if (i == 0) {
		if (flag == 0) 
			printf("%D is a prime\n", n);
		else
			printf("%D\n", n);
		exit(0);
	} 
	printf("%D ", i);
	n = n / i;
	flag = 1;
  }
}


long first(k)
long k;
{
/* Return the first factor of k.  If it is a prime, return 0; */

  long i;

  if (k == 2) return(0);
  if (k % 2 == 0) return(2);
  for (i = 3; i <= k/3; i+=2)
	if (k % i == 0) return(i);
  return(0);
}