/* * smallfactors - find the factors of a number < 2^32 * * Copyright (C) 2013 Christoph Zurnieden * * Calc is open software; you can redistribute it and/or modify it under * the terms of the version 2.1 of the GNU Lesser General Public License * as published by the Free Software Foundation. * * Calc is distributed in the hope that it will be useful, but WITHOUT * ANY WARRANTY; without even the implied warranty of MERCHANTABILITY * or FITNESS FOR A PARTICULAR PURPOSE. See the GNU Lesser General * Public License for more details. * * A copy of version 2.1 of the GNU Lesser General Public License is * distributed with calc under the filename COPYING-LGPL. You should have * received a copy with calc; if not, write to Free Software Foundation, Inc. * 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301, USA. */ static resource_debug_level; resource_debug_level = config("resource_debug", 0); define smallfactors(x0) { local d q x flist tuple w; if (x >= (2 ^ 32) - 1) return newerror("smallfactors: number must be < 2^32 -1"); tuple = mat[2]; flist = list(); x = x0; d = 2; q = 0; tuple[0] = d; if (x < 2) return 0; do { q = x // d; while (x == (q * d)) { tuple[0] = d; tuple[1]++; x = floor(q); q = x // d; } d = nextprime(d); if (tuple[1] > 0) append(flist, tuple); tuple = mat[2]; } while (d <= x); return flist; } define printsmallfactors(flist) { local k; for (k = 0; k < size(flist); k++) { print flist[k][0]:"^":flist[k][1]; } } config("resource_debug", resource_debug_level),; if (config("resource_debug") & 3) { print "smallfactors(x0)"; print "printsmallfactors(flist)"; }