Lidgren.Network.NetBigInteger.MultiplyMontyNIsOne C# (CSharp) 메소드

MultiplyMontyNIsOne() 개인적인 정적인 메소드

private static MultiplyMontyNIsOne ( uint x, uint y, uint m, ulong mQuote ) : uint
x uint
y uint
m uint
mQuote ulong
리턴 uint
        private static uint MultiplyMontyNIsOne(
			uint x,
			uint y,
			uint m,
			ulong mQuote)
        {
            ulong um = m;
            ulong prod1 = (ulong)x * (ulong)y;
            ulong u = (prod1 * mQuote) & UIMASK;
            ulong prod2 = u * um;
            ulong tmp = (prod1 & UIMASK) + (prod2 & UIMASK);
            ulong carry = (prod1 >> 32) + (prod2 >> 32) + (tmp >> 32);

            if (carry > um)
            {
                carry -= um;
            }

            return (uint)(carry & UIMASK);
        }