public void FindNthRoot() { Assert.AreEqual(6, NTTUtility.FindNthRoot(7, 1)); Assert.AreEqual(5, NTTUtility.FindNthRoot(13, 2)); Assert.AreEqual(2, NTTUtility.FindNthRoot(17, 3)); Assert.AreEqual(3, NTTUtility.FindNthRoot(17, 4)); Assert.AreEqual(-1, NTTUtility.FindNthRoot(17, 5)); }
public void FindMinPrime() { for (int n = 1; n > 0; n <<= 1) { var(p, d) = NTTUtility.FindMinPrime(n); Console.WriteLine($"n = {n}: p = {p}, d = {d}"); } }
public void FindPrimes() { var n = 1 << 23; Console.WriteLine($"n = {n}"); foreach (var(p, d) in NTTUtility.FindPrimes(n, 800000000, int.MaxValue)) { Console.WriteLine($"p = {p}, d = {d}"); } }
public void FindMinGenerator() { Assert.AreEqual(1, NTTUtility.FindMinGenerator(2)); Assert.AreEqual(2, NTTUtility.FindMinGenerator(3)); Assert.AreEqual(2, NTTUtility.FindMinGenerator(5)); Assert.AreEqual(3, NTTUtility.FindMinGenerator(7)); Assert.AreEqual(2, NTTUtility.FindMinGenerator(13)); Assert.AreEqual(3, NTTUtility.FindMinGenerator(17)); Assert.AreEqual(3, NTTUtility.FindMinGenerator(31)); Assert.AreEqual(6, NTTUtility.FindMinGenerator(41)); Assert.AreEqual(5, NTTUtility.FindMinGenerator(97)); Assert.AreEqual(3, NTTUtility.FindMinGenerator(65537)); Assert.AreEqual(2, NTTUtility.FindMinGenerator(200003)); Assert.AreEqual(3, NTTUtility.FindMinGenerator(7340033)); Assert.AreEqual(15, NTTUtility.FindMinGenerator(13631489)); Assert.AreEqual(3, NTTUtility.FindMinGenerator(104857601)); Assert.AreEqual(3, NTTUtility.FindMinGenerator(167772161)); Assert.AreEqual(3, NTTUtility.FindMinGenerator(469762049)); Assert.AreEqual(11, NTTUtility.FindMinGenerator(754974721)); Assert.AreEqual(3, NTTUtility.FindMinGenerator(998244353)); Assert.AreEqual(3, NTTUtility.FindMinGenerator(1004535809)); Assert.AreEqual(10, NTTUtility.FindMinGenerator(1107296257)); Assert.AreEqual(31, NTTUtility.FindMinGenerator(2013265921)); }