public void Simple() { var rnd = new Random(42); for (int c = 0; c < 100; c++) { for (int n = 1; n < 20; n++) { for (int m = 1; m < 20; m++) { var a = new uint[n]; var b = new uint[m]; for (int i = 0; i < n; i++) { a[i] = rnd.NextUInt(); } for (int i = 0; i < m; i++) { b[i] = rnd.NextUInt(); } ConvolutionAnyMod.Convolution(a, b, 1000000000 + c).Should().Equal(ConvNative(a, b, 1000000000 + c)); } } } }
public void EmptyInt(int[] a, int[] b, uint[] expected) { for (int i = 2; i < 10; i++) { ConvolutionAnyMod.Convolution(a, b, i).Should().Equal(expected); } }
public override void Solve(ConsoleReader cr, ConsoleWriter cw) { int N = cr; int M = cr; uint[] arr = cr.Repeat(N); uint[] brr = cr.Repeat(M); cw.WriteLineJoin(ConvolutionAnyMod.Convolution(arr, brr, 1000000007)); }
public void Mid() { var rnd = new Random(42); int n = 1234, m = 2345; var a = new uint[n]; var b = new uint[m]; for (int i = 0; i < n; i++) { a[i] = rnd.NextUInt(); } for (int i = 0; i < m; i++) { b[i] = rnd.NextUInt(); } ConvolutionAnyMod.Convolution <Mod998244353>(a, b).Should().Equal(ConvNative(a, b, 998244353)); ConvolutionAnyMod.Convolution <Mod1000000000>(a, b).Should().Equal(ConvNative(a, b, 1000000000)); ConvolutionAnyMod.Convolution <Mod1000000007>(a, b).Should().Equal(ConvNative(a, b, 1000000007)); }
public void Large() { var rnd = new Random(42); int n = 123, m = 234; var a = new uint[n]; var b = new uint[m]; for (int i = 0; i < n; i++) { a[i] = rnd.NextUInt(); } for (int i = 0; i < m; i++) { b[i] = rnd.NextUInt(); } for (int i = 0; i < 50; i++) { ConvolutionAnyMod.Convolution(a, b, 1000000005 + i).Should().Equal(ConvNative(a, b, 1000000005 + i)); } }