示例#1
0
        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);
            }
        }
示例#2
0
        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);
            }
        }
示例#3
0
        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);
        }
示例#5
0
        public void Convolution_FNTT101()
        {
            var ntt = new FNTT101(16, true);

            Test02(ntt.Convolution);
        }