static void Transform(int n, long m, long w, bool result) { var ntt = new FNTT101(n, m, w); var f1 = Enumerable.Range(3, 5).Select(v => (long)v).ToArray(); var f_ = ntt.Transform(f1, false); var f2 = ntt.Transform(f_, true).Resize(f1.Length); if (result) { CollectionAssert.AreEqual(f1, f2); } else { CollectionAssert.AreNotEqual(f1, f2); } }
static void Convolution(int n, long m, long w, bool result) { var ntt = new FNTT101(n, m, w); var f = new long[] { 2, 1, 1 }; var g = new long[] { m - 1, m - 1, 1 }; var expected = new long[] { m - 2, m - 3, 0, 0, 1 }; var actual = ntt.Convolution(f, g).Resize(expected.Length); if (result) { CollectionAssert.AreEqual(expected, actual); } else { CollectionAssert.AreNotEqual(expected, actual); } }
public void Transform_FNTT101() { var ntt = new FNTT101(n, true); Test(f => ntt.Transform(f, false), f => ntt.Transform(f, true)); }
public void Convolution_FNTT101() { var ntt = new FNTT101(n << 1, true); Test(ntt.Convolution); }
public void Convolution_FNTT101() { var ntt = new FNTT101(16, true); Test02(ntt.Convolution); }