Beispiel #1
0
        public override long LongIndexOf(BigInteger item)
        {
            if (item.Sign <= 0)
            {
                return(-1L);
            }
            if (item == BigInteger.One)
            {
                return(0L);
            }
            if (_num.Sign <= 0)
            {
                return(-1L);
            }
            if (!(_num % item).IsZero)
            {
                return(-1L);
            }
            long index = 0L, mult = 1L;

            using (var x = _factors.GetEnumerator())
            {
                using (var y = _prime.Factors(item).ToLookup(z => z).GetEnumerator())
                {
                    y.MoveNext();
                    while (x.MoveNext())
                    {
                        if (x.Current.Key == y.Current.Key)
                        {
                            index += y.Current.Count() * mult;
                            if (!y.MoveNext())
                            {
                                break;
                            }
                        }
                        mult *= x.Current.Count() + 1L;
                    }
                }
            }
            return(index);
        }
Beispiel #2
0
 public BigDivisor(BigInteger num, BigPrime prime)
 {
     _factors = prime.Factors(num).ToLookup(x => x);
     _num     = num;
     _prime   = prime;
 }