public PPDN(PPDN other) { m_base = other.m_base; m_nextBase = other.m_nextBase; m_nextBaseRemainder = other.m_nextBaseRemainder; m_lastBases = new Stack <BigInteger>(other.m_lastBases); m_lastBaseRemainders = new Stack <int>(other.m_lastBaseRemainders); m_digits = (byte[])other.m_digits.Clone(); m_digitsUpToNow = other.m_digitsUpToNow; }
public PPDN(PPDN other) { m_base = other.m_base; m_nextBase = other.m_nextBase; m_nextBaseRemainder = other.m_nextBaseRemainder; m_lastBases = new Stack<BigInteger>(other.m_lastBases); m_lastBaseRemainders = new Stack<int>(other.m_lastBaseRemainders); m_digits = (byte[])other.m_digits.Clone(); m_digitsUpToNow = other.m_digitsUpToNow; }
static void tryBase(byte b) { Console.Out.WriteLine("Base " + b + " (" + DateTime.Now.ToString() + ")"); Parallel.For(1, b, index => { byte dInner = (byte)index; PPDN p = new PPDN(b); tryDigit(p, dInner, (byte)(b - 1)); Console.Out.WriteLine(" " + dInner); }); //for (byte d1 = 1; d1 < b; d1++) //{ // PPDN p = new PPDN(b); // tryDigit(p, d1, (byte)(b - 1)); //} }
static void tryDigit(PPDN p, byte digit, byte levelsLeft) { bool worked = p.addDigit(digit); if (worked) { if (levelsLeft - 1 > 0) { List<byte> digitsToTry = new List<byte>(p.digitsLeft()); foreach (byte nextDigit in digitsToTry) { tryDigit(p, nextDigit, (byte)(levelsLeft - 1)); } } else { Console.Out.WriteLine(" FOUND! " + p); } p.removeLastDigit(); } }
static void tryDigit(PPDN p, byte digit, byte levelsLeft) { bool worked = p.addDigit(digit); if (worked) { if (levelsLeft - 1 > 0) { List <byte> digitsToTry = new List <byte>(p.digitsLeft()); foreach (byte nextDigit in digitsToTry) { tryDigit(p, nextDigit, (byte)(levelsLeft - 1)); } } else { Console.Out.WriteLine(" FOUND! " + p); } p.removeLastDigit(); } }