Example #1
0
  public static void main(String[] args) {
    String datFile = args[0];
    String dstFile = args[1];
    String ansFile = args[2];

    String data = reader.getString(datFile);
    String[] lines = data.split("\n");
    int p = Integer.valueOf(lines[0]);
    int n = Integer.valueOf(lines[1]);
    int[] polynomial = new int[n + 1];
    String[] coefficients = lines[2].split(" ");
    for (int i = 0; i < coefficients.length; i++)
      polynomial[n - i] = Integer.valueOf(coefficients[i]);
    polynomial = Polynomial.clear(polynomial);

    String sigma = reader.getString(dstFile);
    int s = Integer.valueOf(sigma);

    int ml = 0;
    int[][] minimals = new int[2 * s][];

    for (int i = 1; i < s; i++) {
      int[] pol = Polynomial.field(MinimalPolynomial.findPolynomial(polynomial, i, p), p);
      int[] min = MinimalPolynomial.findMinimal(pol, polynomial, p);
      minimals[ml] = min;
      ml++;
    }

    Set<List<Integer>> clean = removeDuplicates(minimals, ml);
    int[] result = {1};
    for (List<Integer> a : clean) {
      int[] t = toArray(a);
      result = Polynomial.field(Polynomial.multiply(result, t), p);
    }

    StringBuilder res = new StringBuilder();
    res.append(p);
    res.append("\n");
    res.append(new Double(Math.pow(p, n)).intValue() - 1);
    res.append("\n");
    for (int i = result.length - 1; i >= -(Math.pow(p, n) - 1 - result.length); i--) {
      if (i < 0) res.append("0");
      else res.append(result[i]);
      res.append(" ");
    }

    res.append("\n");

    writer.writeString(ansFile, res.toString());
  }