7 std::vector<size_t> get_pds(
size_t p) {
8 std::vector<size_t> result = find_pds(p);
10 size_t pdslength = p *p + p + 1;
11 std::vector<size_t> count(pdslength, 0);
12 for (
size_t i = 0;i < result.size(); ++i) {
13 for (
size_t j = 0;j < result.size(); ++j) {
15 count[(result[i] - result[j] + pdslength) % pdslength]++;
19 for (
size_t i = 1;i < count.size(); ++i) {
20 if (count[i] != 1) ispds =
false;
27 logstream(
LOG_ERROR) <<
"Fail to generate pds for p = " << p << std::endl;
28 return std::vector<size_t>();
33 bool test_seq(
size_t a,
size_t b,
size_t c,
size_t p, std::vector<size_t>& result) {
34 std::vector<size_t> seq;
35 size_t pdslength = p*p + p + 1;
36 seq.resize(pdslength + 3);
37 seq[0] = 0; seq[1] = 0; seq[2] = 1;
39 for (
size_t i = 3; i < seq.size(); ++i) {
40 seq[i] = a * seq[i - 1] + b * seq[i - 2] + c * seq[i - 3];
45 if (i < pdslength && ctr > p + 1)
return false;
47 if (seq[pdslength] == 0 && seq[pdslength + 1] == 0){
50 for (
size_t i = 0; i < pdslength; ++i) {
56 if (result.size() != p + 1) {
68 std::vector<size_t> find_pds(
size_t p) {
69 std::vector<size_t> result;
70 for (
size_t a = 0; a < p; ++a) {
71 for (
size_t b = 0; b < p; ++b) {
72 if (b == 0 && a == 0)
continue;
73 for (
size_t c = 1; c < p; ++c) {
74 if (test_seq(a,b,c,p,result)) {