예제 #1
0
        public void GivenNumberWithSamePrimeFactors_WhenFactoring_ThenFactorsOfThatNumberShouldBeReturned()
        {
            var factors = new Factoring().GetFactors(9).ToArray();

            Assert.AreEqual(2, factors.Length);
            Assert.AreEqual((ulong)3, factors.First());
            Assert.AreEqual((ulong)3, factors.Skip(1).First());
        }
예제 #2
0
                private static bool IsSmith(long l)
                {
                    if (l.IsPrime())
                    {
                        return(false);
                    }
                    var digitSum  = l.ToString().Select(c => c - '0').Sum();
                    var factorSum = Factoring.Factor(l).Sum(
                        factor => factor.Exp * factor.Prime.ToString().Select(c => c - '0').Sum());

                    return(factorSum == digitSum);
                }
예제 #3
0
        public void GivenNumberWithSeveralFactors_WhenFactoring_ThenFactorsOfThatNumberShouldBeReturned()
        {
            var expectedFactors = new ulong[] { 2, 2, 3, 5, 11, 11, 13, 17, 53 };

            var value = expectedFactors.Aggregate<ulong, ulong>(1, (current, factor) => current * factor);

            var factors = new Factoring().GetFactors(value).ToArray();

            for (var i = 0; i < expectedFactors.Length; i++)
            {
                Assert.AreEqual(expectedFactors[i], factors[i]);
            }
        }
예제 #4
0
 private static bool IsDivisible(int n, int m)
 {
     foreach (var factor in Factoring.Factor(n))
     {
         var val            = (int)factor.Prime;
         var valPower       = val;
         var expInFactorial = 0;
         while (valPower <= m)
         {
             expInFactorial += m / valPower;
             valPower       *= val;
         }
         if (expInFactorial < factor.Exp)
         {
             return(false);
         }
     }
     return(true);
 }
        static void Main(string[] args)
        {
            long numberToFactor           = 45;
            long nTrials                  = 100;
            bool useRobustPhaseEstimation = true;


            for (int i = 0; i < nTrials; ++i)
            {
                try
                {
                    using (QuantumSimulator sim = new QuantumSimulator())
                    {
                        Console.WriteLine($"==========================================");
                        Console.WriteLine($"Number to be Factored {numberToFactor}");

                        (long factor1, long factor2) =
                            Factoring.Run(sim, numberToFactor, useRobustPhaseEstimation).Result;

                        Console.WriteLine($"Factors of {numberToFactor}  are {factor1} and {factor2}");
                    }
                }
                catch (AggregateException e)
                {
                    Console.WriteLine($"Factorization of number has failed:");

                    foreach (Exception eInner in e.InnerExceptions)
                    {
                        if (eInner is ExecutionFailException failException)
                        {
                            Console.WriteLine($"   {failException.Message}");
                        }
                    }
                }
            }
        }
예제 #6
0
        public void GivenPrimeNumber_WhenFactoring_ThenPrimeNumberShouldBeReturned()
        {
            const ulong expected = 2;
            var factors = new Factoring().GetFactors(expected).ToArray();

            Assert.AreEqual(expected, factors.Single());
        }
예제 #7
0
 public EventsController()
 {
     _uow     = new UnitOfWork(new Event_Manager_DbContext());
     _factory = new Factoring();
 }