Go to the source code of this file.
|
unsigned long * | computeMinimalPolynomial (unsigned long **matrix, unsigned n, unsigned long p) |
|
unsigned long | modularInverse (long long x, long long p) |
|
void | vectorMatrixMult (unsigned long *vec, unsigned long **mat, unsigned **nonzeroIndices, unsigned *nonzeroCounts, unsigned long *result, unsigned n, unsigned long p) |
|
void | rem (unsigned long *a, unsigned long *q, unsigned long p, int °a, int degq) |
|
void | quo (unsigned long *a, unsigned long *q, unsigned long p, int °a, int degq) |
|
void | mult (unsigned long *result, unsigned long *a, unsigned long *b, unsigned long p, int dega, int degb) |
|
int | gcd (unsigned long *g, unsigned long *a, unsigned long *b, unsigned long p, int dega, int degb) |
|
int | lcm (unsigned long *l, unsigned long *a, unsigned long *b, unsigned long p, int dega, int degb) |
|
static unsigned long | multMod (unsigned long a, unsigned long b, unsigned long p) |
|
◆ ULONG64
◆ computeMinimalPolynomial()
Definition at line 428 of file minpoly.cc.
430{
433
434 unsigned long *
result =
new unsigned long[n + 1];
435 unsigned long *
mpvec =
new unsigned long[n + 1];
436 unsigned long *
tmp =
new unsigned long[n + 1];
437
438
439 for(
int i = 0;
i <= n;
i++)
440 {
442 }
444
446
447
448
449
452 for (
int i = 0;
i < n;
i++)
453 {
456 for (
int j = 0;
j < n;
j++)
457 {
459 {
462 }
463 }
464 }
465
467
468 unsigned long *
vec =
new unsigned long[n];
469 unsigned long *
vecnew =
new unsigned long[n];
470
473 {
474 for(
int j = 0;
j < n;
j++)
475 {
477 }
479
481
482 while(true)
483 {
485
487 {
488 break;
489 }
490
495 }
496
497
500 {
502 }
503
504
505
507 {
512 }
513 else
514 {
515
516
517
518 for(
int j = 0;
j <= n;
j++)
519 {
521 }
526
528 {
529
531 }
532 else
533 {
535
536
537
538
539
540
542 {
544 }
545 else
546 {
548 }
549 }
550 }
551
553 }
554
555 for (
int i = 0;
i < n;
i++)
556 {
558 }
561
562
567
569}
void vectorMatrixMult(unsigned long *vec, unsigned long **mat, unsigned **nonzeroIndices, unsigned *nonzeroCounts, unsigned long *result, unsigned n, unsigned long p)
int lcm(unsigned long *l, unsigned long *a, unsigned long *b, unsigned long p, int dega, int degb)
◆ gcd()
Definition at line 666 of file minpoly.cc.
668{
669 unsigned long *
tmp1 =
new unsigned long[
dega + 1];
670 unsigned long *
tmp2 =
new unsigned long[
degb + 1];
672 {
674 }
676 {
678 }
681
684
686 {
691
695 }
696
698 {
700 }
701
704
706}
void rem(unsigned long *a, unsigned long *q, unsigned long p, int °a, int degq)
◆ lcm()
Definition at line 709 of file minpoly.cc.
711{
712 unsigned long *
g =
new unsigned long[
dega + 1];
713
715 {
717 }
718
720
722 {
723
725 }
727
728
730 {
733 {
735 }
736 }
737
739}
void mult(unsigned long *result, unsigned long *a, unsigned long *b, unsigned long p, int dega, int degb)
void quo(unsigned long *a, unsigned long *q, unsigned long p, int °a, int degq)
unsigned long modularInverse(long long x, long long p)
int gcd(unsigned long *g, unsigned long *a, unsigned long *b, unsigned long p, int dega, int degb)
static unsigned long multMod(unsigned long a, unsigned long b, unsigned long p)
◆ modularInverse()
Definition at line 744 of file minpoly.cc.
745{
752
753 long long q, t1, t2,
t3;
755 {
766 }
767
769 {
771 }
772
773 return (
unsigned long)
u1;
774}
◆ mult()
Definition at line 647 of file minpoly.cc.
649{
650
651
653 {
655 {
658 {
660 }
661 }
662 }
663}
◆ multMod()
Definition at line 202 of file minpoly.h.
203{
204#if SIZEOF_LONG == 4
205#define ULONG64 (unsigned long long)
206#else
207#define ULONG64 (unsigned long)
208#endif
210}
◆ quo()
Definition at line 597 of file minpoly.cc.
599{
602
603
605 {
607 }
608
610 {
615 {
619 {
621 }
622 }
623
625 {
627 }
628 }
629
630
632 {
634 }
635
637 {
639 }
640
642
644}
◆ rem()
Definition at line 572 of file minpoly.cc.
574{
576 {
580 {
584 {
586 }
587 }
588
590 {
592 }
593 }
594}
◆ vectorMatrixMult()
Definition at line 393 of file minpoly.cc.
396{
398
399 for(
int i = 0;
i < n;
i++)
400 {
403 {
407 {
409 }
410 }
411 }
412}