Esempio n. 1
0
        private void InitFromString(string longInteger)
        {
            if (string.IsNullOrEmpty(longInteger))
            {
                throw new ArgumentException();
            }
            int digitCount = 0;
            var result     = new Integer(0);
            var ten        = new Integer(10);
            var digits     = new Dictionary <char, Integer>();

            for (ulong i = '0'; i <= '9'; i++)
            {
                digits.Add(Convert.ToChar(i), new Integer(i - '0'));
            }
            foreach (var chr in longInteger.Reverse())
            {
                if (char.IsDigit(chr))
                {
                    result = result + digits[chr] * IntegerMath.Pow(ten, digitCount);
                    digitCount++;
                }
            }
            _digitCount = result._digitCount;
            _digits     = result._digits;
        }
Esempio n. 2
0
 public static BigInteger LeastCommonMultiple(this BigInteger a, BigInteger b)
 {
     Extreme.Mathematics.BigInteger emA    = ToUnsignedExtremeMathematics(a);
     Extreme.Mathematics.BigInteger emB    = ToUnsignedExtremeMathematics(b);
     Extreme.Mathematics.BigInteger result = IntegerMath.LeastCommonMultiple(emA, emB);
     return(ToUnsignedBigInteger(result));
 }
Esempio n. 3
0
        public void Read(ref int[,] array, int offsetX, int offsetY, int width, int height, int min, int max)
        {
            int lastX = offsetX + width, lastY = offsetY + height;
            int count = max - min;
            int bits  = IntegerMath.ILog2(IntegerMath.ToPowerOf2(Math.Abs(count)));

            if (max >= 0)
            {
                for (int y = offsetY; y < lastY; y++)
                {
                    for (int x = offsetX; x < lastX; x++)
                    {
                        array[x, y] = br.ReadBits(bits) + min;
                    }
                }
            }
            else
            {
                for (int y = offsetY; y < lastY; y++)
                {
                    for (int x = offsetX; x < lastX; x++)
                    {
                        array[x, y] = -br.ReadBits(bits) + min;
                    }
                }
            }
        }
Esempio n. 4
0
        public static Polynomial Rem(Polynomial firstArg, Polynomial secondArg)
        {
            var firstDeg  = firstArg.Deg;
            var secondDeg = secondArg.Deg;
            var newDeg    = firstDeg - secondDeg;
            var result    = new ulong[newDeg + 1];
            var reminder  = (ulong[])firstArg._coefficients.Clone();
            var mod       = secondArg._mod;


            ulong firstLc;
            ulong secondLc = secondArg[secondDeg];

            for (int i = 0; i <= newDeg; i++)
            {
                firstLc            = reminder[firstDeg - i];
                result[newDeg - i] = (firstLc * IntegerMath.Inverse(secondLc, mod)) % mod;
                for (int j = 0; j <= secondDeg; j++)
                {
                    reminder[firstDeg - secondDeg + j - i] =
                        (reminder[firstDeg - secondDeg + j - i] + (mod - (result[newDeg - i] * secondArg[j]) % mod)) % mod;
                }
            }
            return(new Polynomial(reminder));
        }
Esempio n. 5
0
 public static BigInteger GreatestCommonDivisor(this BigInteger a, BigInteger b)
 {
     Extreme.Mathematics.BigInteger emA    = ToUnsignedExtremeMathematics(a);
     Extreme.Mathematics.BigInteger emB    = ToUnsignedExtremeMathematics(b);
     Extreme.Mathematics.BigInteger result = IntegerMath.GreatestCommonDivisor(emA, emB);
     return(ToUnsignedBigInteger(result));
 }
Esempio n. 6
0
        static ulong[] InverseFft(ulong[] vector)
        {
            var size = vector.Length;

            if (size == 1)
            {
                return(vector);
            }
            var evenVector = new ulong[size / 2];
            var oddVector  = new ulong[size / 2];

            for (int i = 0; i < size / 2; i++)
            {
                evenVector[i] = vector[2 * i];
                oddVector[i]  = vector[2 * i + 1];
            }
            evenVector = InverseFft(evenVector);
            oddVector  = InverseFft(oddVector);
            ulong pow    = (ulong)(Power / size);
            ulong root_n = IntegerMath.ModPow(Root_1, pow, Mod);
            ulong w      = 1;

            var result = new ulong[size];

            for (int i = 0; i < size / 2; i++)
            {
                result[i]            = (Inverse * (evenVector[i] + (w * oddVector[i]) % Mod) % Mod) % Mod;
                result[i + size / 2] =
                    (Inverse * (evenVector[i] + Mod - (w * oddVector[i]) % Mod) % Mod) % Mod;

                w = (root_n * w) % Mod;
            }
            return(result);
        }
Esempio n. 7
0
        void ReadBitStream(IO.EndianReader s, byte[] hashBuffer)
        {
            int  max_bit_stream_size  = GetBitStreamSize();
            bool is_probably_from_mcc = hashBuffer.EqualsZero();

            byte[] bs_bytes;
            using (var hasher = Program.GetGen3RuntimeDataHasher())
            {
                int bs_length = ReadBitStreamSize(s, hasher, max_bit_stream_size, is_probably_from_mcc);
                bs_bytes = new byte[IntegerMath.Align(IntegerMath.kInt32AlignmentBit, bs_length)];
                s.Read(bs_bytes, bs_length);

                hasher.TransformFinalBlock(bs_bytes, 0, bs_length);
                InvalidData = hasher.Hash.EqualsArray(hashBuffer) == false;
            }

            if (RequireValidHashes && InvalidData)
            {
                Data = null;
            }
            else
            {
                using (var ms = new System.IO.MemoryStream(bs_bytes))
                    using (var bs = new IO.BitStream(ms, System.IO.FileAccess.Read, streamName: "GameVariant"))
                    {
                        bs.StreamMode = System.IO.FileAccess.Read;

                        Data.Serialize(bs);
                    }
            }
        }
Esempio n. 8
0
        public Polynomial FindPrimitiveRoot()
        {
            var eulerPhiFactorization = IntegerMath.Factorize(_cardinality - 1);
            var one      = new Polynomial(new ulong[] { 1 });
            var zero     = new Polynomial(new ulong[] { 0 });
            var elements = GetAllElements();

            foreach (var g in elements)
            {
                if (g != zero)
                {
                    var tryNextelement = false;
                    foreach (var prime in eulerPhiFactorization.Keys)
                    {
                        if (Pow(g, (_cardinality - 1) / prime) == one)
                        {
                            tryNextelement = true;
                            break;
                        }
                    }
                    if (!tryNextelement)
                    {
                        return(g);
                    }
                }
            }

            throw new OperationCanceledException("Корень не найден!");
        }
Esempio n. 9
0
        public void Sqrt16Int()
        {
            int actual   = IntegerMath.Sqrt(16);
            int expected = 4;

            Assert.AreEqual(expected, actual);
        }
Esempio n. 10
0
        public void SqrtZeroLong()
        {
            long actual   = IntegerMath.Sqrt(0L);
            long expected = 0L;

            Assert.AreEqual(expected, actual);
        }
Esempio n. 11
0
        public void SqrtNineInt()
        {
            int actual   = IntegerMath.Sqrt(9);
            int expected = 3;

            Assert.AreEqual(expected, actual);
        }
Esempio n. 12
0
        public void SqrtZeroInt()
        {
            int actual   = IntegerMath.Sqrt(0);
            int expected = 0;

            Assert.AreEqual(expected, actual);
        }
Esempio n. 13
0
        public void SqrtMaxUlong()
        {
            ulong actual   = IntegerMath.Sqrt(ulong.MaxValue);
            ulong expected = 4294967295;

            Assert.AreEqual(expected, actual);
        }
Esempio n. 14
0
        public void IsPowerOfTwoTrueLargeLong()
        {
            long l = int.MaxValue;

            ++l;
            Assert.IsTrue(IntegerMath.IsPowerOfTwo(l));
        }
Esempio n. 15
0
        public void SqrtMidHighLong()
        {
            long actual   = IntegerMath.Sqrt(3037000499L);
            long expected = 55108L;

            Assert.AreEqual(expected, actual);
        }
Esempio n. 16
0
        public void SqrtMaxLong()
        {
            long actual   = IntegerMath.Sqrt(long.MaxValue);
            long expected = 3037000499L;

            Assert.AreEqual(expected, actual);
        }
Esempio n. 17
0
        public void SqrtNineLong()
        {
            long actual   = IntegerMath.Sqrt(9L);
            long expected = 3L;

            Assert.AreEqual(expected, actual);
        }
Esempio n. 18
0
        public void SqrtFourInt()
        {
            int actual   = IntegerMath.Sqrt(4);
            int expected = 2;

            Assert.AreEqual(expected, actual);
        }
Esempio n. 19
0
        public void Sqrt16Long()
        {
            long actual   = IntegerMath.Sqrt(16L);
            long expected = 4L;

            Assert.AreEqual(expected, actual);
        }
Esempio n. 20
0
        public void SqrtTwoLong()
        {
            long actual   = IntegerMath.Sqrt(2L);
            long expected = 1L;

            Assert.AreEqual(expected, actual);
        }
Esempio n. 21
0
        public void SqrtFourLong()
        {
            long actual   = IntegerMath.Sqrt(4L);
            long expected = 2L;

            Assert.AreEqual(expected, actual);
        }
Esempio n. 22
0
 private void button1_Click(object sender, RoutedEventArgs e)
 {
     try
     {
         ulong mod = ulong.Parse(modTb.Text);
         var   opr = checkBox1.IsChecked;
         if (opr == true)
         {
             var roo        = IntegerMath.FindPrimitiveRoot(mod);
             var strBuilder = new StringBuilder();
             strBuilder.Append(roo + ";" + Environment.NewLine);
             ResultTb.Text  = strBuilder + Environment.NewLine;
             ResultTb.Text += "Найден один примитивный элемент!";
         }
         else
         {
             var roots      = IntegerMath.FindAllPrimitiveRoots(mod);
             var strBuilder = new StringBuilder();
             int count      = 0;
             foreach (var root in roots)
             {
                 count++;
                 strBuilder.Append(root + ";" + Environment.NewLine);
             }
             ResultTb.Text  = strBuilder + Environment.NewLine;
             ResultTb.Text += "Всего примитивных элементов в GF(" + mod + ") = " + count;
         }
     }
     catch (Exception ex)
     {
         ResultTb.Text = "";
         MessageBox.Show(ex.Message);
     }
 }
Esempio n. 23
0
        public void SqrtMaxInt()
        {
            int actual   = IntegerMath.Sqrt(int.MaxValue);
            int expected = 46340;

            Assert.AreEqual(expected, actual);
        }
Esempio n. 24
0
        public void SqrtTwoInt()
        {
            int actual   = IntegerMath.Sqrt(2);
            int expected = 1;

            Assert.AreEqual(expected, actual);
        }
Esempio n. 25
0
 private void CheckPowerOf2(string sName, int iValue)
 {
     if (IntegerMath.IsPowerOf2(iValue) == false)
     {
         throw new ArgumentException(sName + "(=" + iValue.ToString() + ") must be a power of two(like 2,4,8,32,64,...)!");
     }
 }
Esempio n. 26
0
        public void Sqrt16Sbyte()
        {
            sbyte value    = 16;
            sbyte actual   = IntegerMath.Sqrt(value);
            sbyte expected = 4;

            Assert.AreEqual(expected, actual);
        }
Esempio n. 27
0
        public void Sqrt16Ulong()
        {
            ulong value    = 16;
            ulong actual   = IntegerMath.Sqrt(value);
            ulong expected = 4;

            Assert.AreEqual(expected, actual);
        }
Esempio n. 28
0
        public void Sqrt16Short()
        {
            short value    = 16;
            short actual   = IntegerMath.Sqrt(value);
            short expected = 4;

            Assert.AreEqual(expected, actual);
        }
Esempio n. 29
0
        public void Sqrt10BigInteger()
        {
            BigInteger actual = 10;

            actual = IntegerMath.Sqrt(actual);
            BigInteger expected = 3;

            Assert.AreEqual(expected, actual);
        }
Esempio n. 30
0
        public void SqrtLargeBigInteger1()
        {
            BigInteger actual = long.MaxValue;

            actual = IntegerMath.Sqrt((actual * actual) + 27);
            BigInteger expected = long.MaxValue;

            Assert.AreEqual(expected, actual);
        }