From 7e0f021a9aec35fd8e6725e87e3313b101d26f5e Mon Sep 17 00:00:00 2001 From: Tobias Klauser Date: Sun, 27 Jan 2008 11:37:44 +0100 Subject: Initial import (2.0.2-6) --- reference/C/CONTRIB/SNIP/ifactor.c | 66 ++++++++++++++++++++++++++++++++++++++ 1 file changed, 66 insertions(+) create mode 100755 reference/C/CONTRIB/SNIP/ifactor.c (limited to 'reference/C/CONTRIB/SNIP/ifactor.c') diff --git a/reference/C/CONTRIB/SNIP/ifactor.c b/reference/C/CONTRIB/SNIP/ifactor.c new file mode 100755 index 0000000..900c57a --- /dev/null +++ b/reference/C/CONTRIB/SNIP/ifactor.c @@ -0,0 +1,66 @@ +/* +** ifactor.c -- print prime factorization of a number +** +** Ray Gardner -- 1985 -- public domain +*/ + +#include +#include + +int prevfact = 0; +void factor (long); +void show (long, int); + +void main (int argc, char *argv[]) +{ + while ( --argc ) + factor(atol(*++argv)); +} + +void factor (long n) +{ + long d; + int k; + long n0 = n; + prevfact = 0; + + printf("%ld ",n); + if ( n < 2 ) + { + printf("is less than 2.\n"); + return; + } + else if ( n > 2 ) + { + d = 2; + for ( k = 0; n % d == 0; k++ ) + n /= d; + if ( k ) + show(d,k); + for ( d = 3; d * d <= n; d += 2 ) + { + for ( k = 0; n % d == 0; k++ ) + n /= d; + if ( k ) + show(d,k); + } + } + if ( n > 1 ) + { + if ( n == n0 ) + printf(" is prime"); + else show(n,1); + } + printf("\n"); +} + +void show (long d, int k) +{ + if ( prevfact ) + printf(" * "); + else printf(" = "); + prevfact++; + printf("%ld",d); + if ( k > 1 ) + printf("^%d",k); +} -- cgit v1.2.3-54-g00ecf