 |
My Project
UNKNOWN_GIT_VERSION
|
This file provides miscellaneous functionality.
More...
Go to the source code of this file.
|
static FORCE_INLINE void | number2mpz (number n, mpz_t m) |
|
static FORCE_INLINE number | mpz2number (mpz_t m) |
|
void | setListEntry (lists L, int index, mpz_t n) |
|
void | setListEntry_ui (lists L, int index, unsigned long ui) |
|
static int | factor_using_division (mpz_t t, unsigned int limit, lists primes, int *multiplicities, int &index, unsigned long bound) |
|
static void | factor_using_pollard_rho (mpz_t n, unsigned long a, lists primes, int *multiplicities, int &index) |
|
static void | factor_gmp (mpz_t t, lists primes, int *multiplicities, int &index, unsigned long bound) |
|
lists | primeFactorisation (const number n, const int pBound) |
| Factorises a given bigint number n into its prime factors less than or equal to a given bound, with corresponding multiplicities. More...
|
|
void | singular_example (char *str) |
|
BOOLEAN | setOption (leftv res, leftv v) |
|
char * | showOption () |
|
char * | versionString () |
|
int | singular_fstat (int fd, struct stat *buf) |
|
void | m2_end (int i) |
|
void | omSingOutOfMemoryFunc () |
|
static BOOLEAN | ii_FlintZn_init (leftv res, leftv a) |
|
static BOOLEAN | ii_FlintQ_init (leftv res, leftv a) |
|
static BOOLEAN | iiFloat (leftv res, leftv pnn) |
|
static BOOLEAN | iiCrossProd (leftv res, leftv args) |
|
void | siInit (char *name) |
|
This file provides miscellaneous functionality.
For more general information, see the documentation in misc_ip.h.
Definition in file misc_ip.cc.
◆ PLURAL_INTERNAL_DECLARATIONS
#define PLURAL_INTERNAL_DECLARATIONS 1 |
◆ SI_SHOW_BUILTIN_MODULE
◆ factor_gmp()
static void factor_gmp |
( |
mpz_t |
t, |
|
|
lists |
primes, |
|
|
int * |
multiplicities, |
|
|
int & |
index, |
|
|
unsigned long |
bound |
|
) |
| |
|
static |
Definition at line 342 of file misc_ip.cc.
344 unsigned int division_limit;
346 if (mpz_sgn (t) == 0)
350 division_limit = mpz_sizeinbase (t, 2);
351 if (division_limit > 1000)
352 division_limit = 1000 * 1000;
354 division_limit = division_limit * division_limit;
358 if (mpz_cmp_ui (t, 1) != 0)
360 if (mpz_probab_prime_p (t, 10))
363 multiplicities[
index++] = 1;
◆ factor_using_division()
static int factor_using_division |
( |
mpz_t |
t, |
|
|
unsigned int |
limit, |
|
|
lists |
primes, |
|
|
int * |
multiplicities, |
|
|
int & |
index, |
|
|
unsigned long |
bound |
|
) |
| |
|
static |
Definition at line 124 of file misc_ip.cc.
129 unsigned *addv =
add;
130 unsigned int failures;
131 int bound_not_reached=1;
136 f = mpz_scan1 (t, 0);
137 mpz_div_2exp (t, t,
f);
141 multiplicities[
index++] =
f;
147 mpz_tdiv_qr_ui (q, r, t, 3);
156 multiplicities[
index++] =
f;
161 mpz_tdiv_qr_ui (q, r, t, 5);
170 multiplicities[
index++] =
f;
176 unsigned long last_f=0;
177 while (mpz_cmp_ui (t, 1) != 0)
179 mpz_tdiv_qr_ui (q, r, t,
f);
183 if (mpz_cmp_ui (t,
f) < 0)
187 if (failures > limit)
201 multiplicities[
index]++;
206 multiplicities[
index-1]++;
216 return bound_not_reached;
◆ factor_using_pollard_rho()
static void factor_using_pollard_rho |
( |
mpz_t |
n, |
|
|
unsigned long |
a, |
|
|
lists |
primes, |
|
|
int * |
multiplicities, |
|
|
int & |
index |
|
) |
| |
|
static |
Definition at line 219 of file misc_ip.cc.
224 unsigned long long k,
l,
i;
228 mpz_init_set_ui (last_f, 0);
229 mpz_init_set_ui (
y, 2);
230 mpz_init_set_ui (
x, 2);
231 mpz_init_set_ui (x1, 2);
232 mpz_init_set_ui (P, 1);
236 while (mpz_cmp_ui (n, 1) != 0)
244 mpz_add_ui (
x,
x, a);
252 if (mpz_cmp_ui (t1, 1) != 0)
260 if (mpz_cmp_ui (t1, 1) != 0)
266 for (
i = 0;
i <
k;
i++)
270 mpz_add_ui (
x,
x, a);
280 mpz_add_ui (
y,
y, a);
284 while (mpz_cmp_ui (t1, 1) == 0);
286 mpz_divexact (n, n, t1);
288 if (!mpz_probab_prime_p (t1, 10))
293 mpn_random (&a_limb, (mp_size_t) 1);
302 if (mpz_cmp(t1,last_f)==0)
304 multiplicities[
index-1]++;
310 multiplicities[
index++] = 1;
316 if (mpz_probab_prime_p (n, 10))
318 if (mpz_cmp(n,last_f)==0)
320 multiplicities[
index-1]++;
326 multiplicities[
index++] = 1;
◆ ii_FlintQ_init()
◆ ii_FlintZn_init()
◆ iiCrossProd()
Definition at line 1287 of file misc_ip.cc.
1293 if (
h==
NULL)
goto crossprod_error;
1296 if (
h->Typ()!=
CRING_CMD)
goto crossprod_error;
1315 WerrorS(
"expected `crossprod(coeffs, ...)`");
◆ iiFloat()
Definition at line 1258 of file misc_ip.cc.
1265 float_len=(int)(
long)pnn->
Data();
1266 float_len2=float_len;
1270 float_len2=(int)(
long)pnn->
Data();
◆ m2_end()
Definition at line 1101 of file misc_ip.cc.
1108 #ifdef HAVE_SIMPLEIPC
1115 #if PORTABLE_SEMAPHORES
1124 #endif // HAVE_SIMPLEIPC
1175 printf(
"Auf Wiedersehen.\n");
1177 printf(
"\n$Bye.\n");
1189 printf(
"\nhalt %d\n",
i);
◆ mpz2number()
◆ number2mpz()
◆ omSingOutOfMemoryFunc()
void omSingOutOfMemoryFunc |
( |
| ) |
|
Definition at line 1199 of file misc_ip.cc.
1201 fprintf(stderr,
"\nSingular error: no more memory\n");
◆ primeFactorisation()
Factorises a given bigint number n into its prime factors less than or equal to a given bound, with corresponding multiplicities.
The method finds all prime factors with multiplicities. If a positive bound is given, then only the prime factors <= pBound are being found. In this case, there may remain an unfactored portion m of n. Also, when n is negative, m will contain the sign. If n is zero, m will be zero. The method returns a list L filled with three entries: L[1] a list; L[1][i] contains the i-th prime factor of |n| as int or bigint (sorted in ascending order), L[2] a list; L[2][i] contains the multiplicity of L[1, i] in |n| as int L[3] contains the remainder m as int or bigint, depending on the size,
We thus have: n = L[1][1]^L[2][1] * ... * L[1][k]^L[2][k] * L[3], where k is the number of mutually distinct prime factors (<= a provided non- zero bound). Note that for n = 0, L[1] and L[2] will be emtpy lists and L[3] will be zero.
- Returns
- the factorisation data in a SINGULAR-internal list
- Parameters
-
[in] | n | the bigint > 0 to be factorised |
[in] | pBound | bound on the prime factors seeked |
Definition at line 372 of file misc_ip.cc.
378 int* multiplicities = (
int*)
omAlloc0(1000*
sizeof(
int));
407 multiplicitiesL->
m[
i].
data = (
void*)(
long)multiplicities[
i];
413 if (positive==-1) mpz_neg(nn,nn);
◆ setListEntry()
void setListEntry |
( |
lists |
L, |
|
|
int |
index, |
|
|
mpz_t |
n |
|
) |
| |
Definition at line 89 of file misc_ip.cc.
94 int ui=(int)mpz_get_si(n);
95 if ((((ui<<3)>>3)==ui)
96 && (mpz_cmp_si(n,(
long)ui)==0))
◆ setListEntry_ui()
void setListEntry_ui |
( |
lists |
L, |
|
|
int |
index, |
|
|
unsigned long |
ui |
|
) |
| |
Definition at line 106 of file misc_ip.cc.
110 if ((((
unsigned long)
i)==ui) && (((i<<3)>>3)==
i))
◆ setOption()
Definition at line 586 of file misc_ip.cc.
612 if(strcmp(n,
"get")==0)
621 if(strcmp(n,
"set")==0)
641 if(strcmp(n,
"none")==0)
659 WarnS(
"cannot set option");
670 else if ((strncmp(n,
"no",2)==0)
678 WarnS(
"cannot clear option");
697 else if ((strncmp(n,
"no",2)==0)
712 Werror(
"unknown option `%s`",n);
721 extern int om_sing_opt_show_mem;
723 else om_sing_opt_show_mem = 0;
◆ showOption()
◆ siInit()
void siInit |
( |
char * |
name | ) |
|
Definition at line 1321 of file misc_ip.cc.
1326 #ifndef __OPTIMIZE__
1395 #ifdef _SC_NPROCESSORS_ONLN
1396 if ((cpu_n=sysconf(_SC_NPROCESSORS_ONLN))>cpus) cpus=cpu_n;
1397 #elif defined(_SC_NPROCESSORS_CONF)
1398 if ((cpu_n=sysconf(_SC_NPROCESSORS_CONF))>cpus) cpus=cpu_n;
◆ singular_example()
void singular_example |
( |
char * |
str | ) |
|
Definition at line 449 of file misc_ip.cc.
455 while (*ss!=
'\0') ss++;
465 if((lib!=
NULL)&&(*lib!=
'\0'))
467 Print(
"// proc %s from lib %s\n",
s,lib);
488 sprintf(sing_file,
"%s/%s.sing", res_m,
s);
502 got = fread(
s,
sizeof(
char),
length,
fd);
506 Werror(
"Error while reading file %s", sing_file);
511 strcat(
s,
"\n;return();\n\n");
520 Werror(
"no example for %s", str);
◆ singular_fstat()
int singular_fstat |
( |
int |
fd, |
|
|
struct stat * |
buf |
|
) |
| |
◆ versionString()
Definition at line 789 of file misc_ip.cc.
792 StringAppend(
"Singular for %s version %s (%d, %d bit) %s #%s",
795 #ifdef MAKE_DISTRIBUTION
796 VERSION_DATE, GIT_VERSION);
802 #if defined(mpir_version)
803 StringAppend(
"MPIR(%s)~GMP(%s),", mpir_version, gmp_version);
804 #elif defined(gmp_version)
822 #if defined(HAVE_DYN_RL)
836 #if defined(HAVE_READLINE) && !defined(FEREAD)
854 #ifdef HAVE_DYNAMIC_LOADING
886 #ifdef __OPTIMIZE_SIZE__
892 #ifdef HAVE_GENERIC_ADD
897 #ifdef HAVE_GENERIC_MULT
919 #define SI_SHOW_BUILTIN_MODULE(name) StringAppend(" %s", #name);
923 #undef SI_SHOW_BUILTIN_MODULE
926 "CC = %s,FLAGS : %s,\n"
927 "CXX = %s,FLAGS : %s,\n"
928 "DEFS : %s,CPPFLAGS : %s,\n"
929 "LDFLAGS : %s,LIBS : %s "
931 "(ver: " __VERSION__
")"
933 "\n",AC_CONFIGURE_ARGS, CC,CFLAGS
" " PTHREAD_CFLAGS,
934 CXX,CXXFLAGS
" " PTHREAD_CFLAGS, DEFS,CPPFLAGS, LDFLAGS,
935 LIBS
" " PTHREAD_LIBS);
◆ add
unsigned add[] = {4, 2, 4, 2, 4, 6, 2, 6} |
|
static |
◆ m2_end_called
◆ n_FlintQ
◆ n_FlintZn
◆ optionStruct
◆ singular_date
const char* singular_date =__DATE__ " " __TIME__ |
◆ verboseStruct
static int si_min(const int a, const int b)
char * fe_fgets_dummy(const char *, char *, int)
short float_len2
additional char-flags, rInit
void feInitResources(const char *argv0)
@ n_Zn
only used if HAVE_RINGS is defined
const BOOLEAN p_procs_dynamic
coeffs nrnInitCfByName(char *s, n_coeffType n)
static FORCE_INLINE void number2mpz(number n, mpz_t m)
static char * iiGetLibName(const procinfov pi)
find the library of an proc
void StringAppendS(const char *st)
volatile BOOLEAN ssiToBeClosed_inactive
FILE * feFopen(const char *path, const char *mode, char *where, short useWerror, short path_only)
BOOLEAN iiEStart(char *example, procinfo *pi)
sipc_sem_t * semaphore[SIPC_MAX_SEMAPHORES]
SI_FOREACH_BUILTIN(SI_GET_BUILTIN_MOD_INIT0) }
int iiInitArithmetic()
initialisation of arithmetic structured data
const CanonicalForm int const CFList const Variable & y
void nRegisterCfByName(cfInitCfByNameProc p, n_coeffType n)
#define SHORT_REAL_LENGTH
static n_coeffType n_FlintQ
BOOLEAN naInitChar(coeffs cf, void *infoStruct)
Initialize the coeffs object.
idhdl enterid(const char *s, int lev, int t, idhdl *root, BOOLEAN init, BOOLEAN search)
volatile BOOLEAN m2_end_called
static unsigned short primes[]
primes, primes_len: used to step through possible extensions
static BOOLEAN length(leftv result, leftv arg)
const struct soptionStruct optionStruct[]
void setListEntry(lists L, int index, mpz_t n)
const char * feSetOptValue(feOptIndex opt, char *optarg)
@ n_nTupel
n-tupel of cf: ZZ/p1,...
coeffs nInitChar(n_coeffType t, void *parameter)
one-time initialisations for new coeffs in case of an error return NULL
@ n_Q
rational (GMP) numbers
void feStringAppendBrowsers(int warn)
static FORCE_INLINE BOOLEAN n_IsZero(number n, const coeffs r)
TRUE iff 'n' represents the zero element.
char *(* fe_fgets_stdin)(const char *pr, char *s, int size)
Class used for (list of) interpreter objects.
static int factor_using_division(mpz_t t, unsigned int limit, lists primes, int *multiplicities, int &index, unsigned long bound)
void feStringAppendResources(int warn)
@ n_long_R
real floating point (GMP) numbers
BOOLEAN flintQ_InitChar(coeffs cf, void *infoStruct)
void factoryseed(int s)
random seed initializer
BOOLEAN singular_in_batchmode
char * fe_fgets(const char *pr, char *s, int size)
int iiAddCproc(const char *libname, const char *procname, BOOLEAN pstatic, BOOLEAN(*func)(leftv res, leftv v))
static BOOLEAN iiCrossProd(leftv res, leftv args)
ring currRing
Widely used global variable which specifies the current polynomial ring for Singular interpreter and ...
n_coeffType nRegister(n_coeffType n, cfInitCharProc p)
ideal k_sca_gr_bba(const ideal F, const ideal Q, const intvec *, const intvec *, kStrategy strat, const ring _currRing)
Modified Plural's Buchberger's algorithmus.
static n_coeffType n_FlintZn
static BOOLEAN iiFloat(leftv res, leftv pnn)
@ n_polyExt
used to represent polys as coeffcients
#define TEST_OPT_INTSTRATEGY
static void factor_using_pollard_rho(mpz_t n, unsigned long a, lists primes, int *multiplicities, int &index)
int status int void * buf
static void factor_gmp(mpz_t t, lists primes, int *multiplicities, int &index, unsigned long bound)
void monitor(void *F, int mode)
void omSingOutOfMemoryFunc()
void setListEntry_ui(lists L, int index, unsigned long ui)
#define SI_SHOW_BUILTIN_MODULE(name)
poly k_NF(ideal F, ideal Q, poly p, int syzComp, int lazyReduce, const ring _currRing)
NOTE: this is just a wrapper which sets currRing for the actual kNF call.
BOOLEAN slPrepClose(si_link l)
ideal k_sca_bba(const ideal F, const ideal Q, const intvec *, const intvec *, kStrategy strat, const ring _currRing)
Modified modern Sinuglar Buchberger's algorithm.
char * iiGetLibProcBuffer(procinfo *pi, int part)
static BOOLEAN rField_is_Ring(const ring r)
void omPrintStats(FILE *fd)
static BOOLEAN ii_FlintZn_init(leftv res, leftv a)
#define SI_RESTORE_OPT(A, B)
The main handler for Singular numbers which are suitable for Singular polynomials.
@ n_Z
only used if HAVE_RINGS is defined
const char * singular_date
static FORCE_INLINE number n_Init(long i, const coeffs r)
a number representing i in the given coeff field/ring r
void killhdl(idhdl h, package proot)
BOOLEAN flintZn_InitChar(coeffs cf, void *infoStruct)
short float_len
additional char-flags, rInit
coeffs flintQInitCfByName(char *s, n_coeffType n)
@ n_transExt
used for all transcendental extensions, i.e., the top-most extension in an extension tower is transce...
BOOLEAN ntInitChar(coeffs cf, void *infoStruct)
Initialize the coeffs object.
#define OPT_STAIRCASEBOUND
@ n_R
single prescision (6,6) real numbers
struct fe_option feOptSpec[]
char * fe_fgets_stdin_drl(const char *pr, char *s, int size)
static char * feResource(feResourceConfig config, int warn)
void StringSetS(const char *st)
static CanonicalForm bound(const CFMatrix &M)
void Werror(const char *fmt,...)
BOOLEAN slClose(si_link l)
char * fe_fgets_stdin_emu(const char *pr, char *s, int size)
ideal k_sca_mora(const ideal F, const ideal Q, const intvec *, const intvec *, kStrategy strat, const ring _currRing)
Modified modern Sinuglar Mora's algorithm.
#define SIPC_MAX_SEMAPHORES
static FORCE_INLINE BOOLEAN n_GreaterZero(number n, const coeffs r)
ordered fields: TRUE iff 'n' is positive; in Z/pZ: TRUE iff 0 < m <= roundedBelow(p/2),...
char name(const Variable &v)
void WerrorS(const char *s)
static BOOLEAN rField_has_simple_inverse(const ring r)
ideal k_gnc_gr_mora(const ideal F, const ideal Q, const intvec *, const intvec *, kStrategy strat, const ring _currRing)
static BOOLEAN ii_FlintQ_init(leftv res, leftv a)
ideal k_gnc_gr_bba(const ideal F, const ideal Q, const intvec *, const intvec *, kStrategy strat, const ring _currRing)
const Variable & v
< [in] a sqrfree bivariate poly
INLINE_THIS void Init(int l=0)
#define SI_SAVE_OPT(A, B)
const CanonicalForm int s
BOOLEAN iiCheckTypes(leftv args, const short *type_list, int report)
check a list of arguemys against a given field of types return TRUE if the types match return FALSE (...
static void * feOptValue(feOptIndex opt)
#define TEST_RINGDEP_OPTS
BOOLEAN iiLibCmd(char *newlib, BOOLEAN autoexport, BOOLEAN tellerror, BOOLEAN force)
void fe_reset_input_mode()
static FORCE_INLINE number mpz2number(mpz_t m)
static int index(p_Length length, p_Ord ord)
BOOLEAN n2pInitChar(coeffs cf, void *infoStruct)
int sem_acquired[SIPC_MAX_SEMAPHORES]
coeffs flintZnInitCfByName(char *s, n_coeffType n)
#define OPT_NOTREGULARITY
@ n_algExt
used for all algebraic extensions, i.e., the top-most extension in an extension tower is algebraic
const struct soptionStruct verboseStruct[]