File: improveB

package info (click to toggle)
frobby 0.9.6-1
  • links: PTS, VCS
  • area: main
  • in suites: forky
  • size: 11,616 kB
  • sloc: cpp: 30,134; sh: 1,184; makefile: 306; ansic: 102; lisp: 10
file content (30 lines) | stat: -rw-r--r-- 754 bytes parent folder | download | duplicates (4)
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
  void improveB(ExternalTerm& b, const TermTree& tree) {
    int position = tree.getPosition() + 1;

    if (_dimension - position < 10)
      return;

    ExternalTerm lcm(_dimension);
    tree.lcm(lcm);

    vector<ExternalTerm> gcds;
    gcds.reserve(_dimension);
    for (int i = 0; i < (int)_dimension; ++i)
      gcds.push_back(lcm);

    ExternalTerm term(_dimension);
    TermTree::TreeIterator treeIt((TermTree&)tree);
    while (!treeIt.atEnd()) {
      treeIt.getTerm(term);
      for (int i = position; i < (int)_dimension; ++i)
	if (term[i] > b[i])
	  gcds[i].gcd(gcds[i], term, position);
      ++treeIt;
    }

    
    for (int i = position; i < (int)_dimension; ++i) {
      gcds[i][i] -= 1;
      b.lcm(b, gcds[i], position);
    }
  }