Esempio n. 1
0
 public static void Quadratic(GNFS gnfs)
 {
     if (gnfs.PrimeFactorBase.QuadraticFactorBase.Any())
     {
         Save.Object(gnfs.PrimeFactorBase.QuadraticFactorBase, Path.Combine(gnfs.SaveLocations.SaveDirectory, $"{nameof(GNFSCore.FactorBase.QuadraticFactorBase)}.json"));
     }
 }
Esempio n. 2
0
            public static void All(GNFS gnfs)
            {
                Save.Gnfs(gnfs);

                int counter = 1;

                foreach (Polynomial poly in gnfs.PolynomialCollection)
                {
                    string filename = $"Polynomial.{counter:00}";
                    Save.Object(poly, Path.Combine(gnfs.SaveLocations.SaveDirectory, filename));
                    counter++;
                }

                //Save.FactorBase.Rational(gnfs);
                //Save.FactorBase.Algebraic(gnfs);
                //Save.FactorBase.Quadratic(gnfs);

                Save.FactorPair.Rational(gnfs);
                Save.FactorPair.Algebraic(gnfs);
                Save.FactorPair.Quadratic(gnfs);

                Save.Relations.Smooth.Append(gnfs);
                Save.Relations.Rough.Append(gnfs);
                Save.Relations.Free.AllSolutions(gnfs);
            }
Esempio n. 3
0
 public static void Algebraic(GNFS gnfs)
 {
     if (gnfs.AlgebraicFactorPairCollection.Any())
     {
         Save.Object(gnfs.AlgebraicFactorPairCollection, Path.Combine(gnfs.SaveLocations.SaveDirectory, $"{nameof(GNFS.AlgebraicFactorPairCollection)}.json"));
     }
 }
Esempio n. 4
0
            public static GNFS All(string filename)
            {
                string loadJson = File.ReadAllText(filename);
                GNFS   gnfs     = JsonConvert.DeserializeObject <GNFS>(loadJson);

                string directoryName = Path.GetDirectoryName(filename);

                gnfs.SaveLocations = new DirectoryLocations(directoryName);

                gnfs.CurrentPolynomial = gnfs.PolynomialCollection.Last();
                ((Polynomial)gnfs.CurrentPolynomial).SetDegree();

                Load.FactorBase.Rational(ref gnfs);
                Load.FactorBase.Algebraic(ref gnfs);
                Load.FactorBase.Quadratic(ref gnfs);

                Load.FactorPair.Rational(ref gnfs);
                Load.FactorPair.Algebraic(ref gnfs);
                Load.FactorPair.Quadratic(ref gnfs);

                gnfs.CurrentRelationsProgress._gnfs = gnfs;

                Load.Relations.Smooth(ref gnfs);
                Load.Relations.Rough(ref gnfs);
                Load.Relations.Free(ref gnfs);

                return(gnfs);
            }
Esempio n. 5
0
 private static bool FileExists(GNFS gnfs)
 {
     if (!_fileExists.HasValue || _fileExists == false)
     {
         _fileExists = File.Exists(Path.Combine(gnfs.SaveLocations.SaveDirectory, $"{nameof(RelationContainer.RoughRelations)}.json"));
     }
     return(_fileExists.Value);
 }
Esempio n. 6
0
 public static void SingleSolution(GNFS gnfs, List <Relation> solution)
 {
     if (solution.Any())
     {
         solution.ForEach(rel => rel.IsPersisted = true);
         Save.Object(solution, Path.Combine(gnfs.SaveLocations.SaveDirectory, $"{nameof(RelationContainer.FreeRelations)}_{gnfs.CurrentRelationsProgress.FreeRelationsCounter}.json"));
         gnfs.CurrentRelationsProgress.FreeRelationsCounter += 1;
     }
 }
Esempio n. 7
0
                public static void Quadratic(ref GNFS gnfs)
                {
                    string filename = Path.Combine(gnfs.SaveLocations.SaveDirectory, $"{nameof(GNFS.QuadraticFactorPairCollection)}.json");

                    if (File.Exists(filename))
                    {
                        gnfs.QuadraticFactorPairCollection = Load.Generic <FactorPairCollection>(filename);
                    }
                }
Esempio n. 8
0
                public static void Quadratic(ref GNFS gnfs)
                {
                    string filename = Path.Combine(gnfs.SaveLocations.SaveDirectory, $"{nameof(GNFSCore.FactorBase.QuadraticFactorBase)}.json");

                    if (File.Exists(filename))
                    {
                        gnfs.PrimeFactorBase.QuadraticFactorBase = Load.Generic <List <BigInteger> >(filename);
                    }
                }
Esempio n. 9
0
 public static void AppendList(GNFS gnfs, List <Relation> roughRelations)
 {
     if (roughRelations != null && roughRelations.Any())
     {
         string filename = Path.Combine(gnfs.SaveLocations.SaveDirectory, $"{nameof(RelationContainer.RoughRelations)}.json");
         string json     = JsonConvert.SerializeObject(roughRelations, Formatting.Indented);
         json = json.Replace("[", "").Replace("]", ",");
         File.AppendAllText(filename, json);
         roughRelations.ForEach(rel => rel.IsPersisted = true);
     }
 }
Esempio n. 10
0
                public static void Rough(ref GNFS gnfs)
                {
                    string filename = Path.Combine(gnfs.SaveLocations.SaveDirectory, $"{nameof(RelationContainer.RoughRelations)}.json");

                    if (File.Exists(filename))
                    {
                        List <Relation> temp = Load.GenericFixedArray <List <Relation> >(filename);
                        temp.ForEach(rel => rel.IsPersisted = true);
                        gnfs.CurrentRelationsProgress.Relations.RoughRelations = temp;
                    }
                }
Esempio n. 11
0
 public static void AllSolutions(GNFS gnfs)
 {
     if (gnfs.CurrentRelationsProgress.Relations.FreeRelations.Any())
     {
         gnfs.CurrentRelationsProgress.FreeRelationsCounter = 1;
         foreach (List <Relation> solution in gnfs.CurrentRelationsProgress.Relations.FreeRelations)
         {
             SingleSolution(gnfs, solution);
         }
     }
 }
Esempio n. 12
0
 public static void Append(GNFS gnfs)
 {
     if (gnfs.CurrentRelationsProgress.Relations.RoughRelations.Any())
     {
         List <Relation> toSave = gnfs.CurrentRelationsProgress.Relations.RoughRelations.Where(rel => !rel.IsPersisted).ToList();
         foreach (Relation rel in toSave)
         {
             Append(gnfs, rel);
         }
     }
 }
Esempio n. 13
0
        public PolyRelationsSieveProgress(GNFS gnfs, int quantity, int valueRange)
        {
            _gnfs     = gnfs;
            Relations = new RelationContainer();

            A          = 0;
            B          = 3;
            Quantity   = quantity;
            ValueRange = valueRange;

            if (MaxB == 0)
            {
                MaxB = (uint)gnfs.PrimeFactorBase.AlgebraicFactorBaseMax;
            }
        }
Esempio n. 14
0
            public static void All(GNFS gnfs)
            {
                Save.Gnfs(gnfs);

                Save.FactorBase.Rational(gnfs);
                Save.FactorBase.Algebraic(gnfs);
                Save.FactorBase.Quadratic(gnfs);

                Save.FactorPair.Rational(gnfs);
                Save.FactorPair.Algebraic(gnfs);
                Save.FactorPair.Quadratic(gnfs);

                Save.Relations.Smooth.Append(gnfs);
                Save.Relations.Rough.Append(gnfs);
                Save.Relations.Free.AllSolutions(gnfs);
            }
Esempio n. 15
0
                    public static void Append(GNFS gnfs, Relation roughRelation)
                    {
                        if (roughRelation != null && !roughRelation.IsSmooth && !roughRelation.IsPersisted)
                        {
                            string filename = Path.Combine(gnfs.SaveLocations.SaveDirectory, $"{nameof(RelationContainer.RoughRelations)}.json");
                            string json     = JsonConvert.SerializeObject(roughRelation, Formatting.Indented);

                            if (FileExists(gnfs))
                            {
                                json += ",";
                            }

                            File.AppendAllText(filename, json);
                            roughRelation.IsPersisted = true;
                        }
                    }
Esempio n. 16
0
            public static GNFS All(string filename)
            {
                string loadJson = File.ReadAllText(filename);
                GNFS   gnfs     = JsonConvert.DeserializeObject <GNFS>(loadJson);

                string directoryName = Path.GetDirectoryName(filename);

                gnfs.SaveLocations = new DirectoryLocations(directoryName);

                int    counter      = 0;
                bool   finished     = false;
                string polyFilename = string.Empty;

                do
                {
                    counter++;
                    polyFilename = Path.GetFullPath(Path.Combine(gnfs.SaveLocations.SaveDirectory, $"Polynomial.{counter:00}"));
                    if (File.Exists(polyFilename))
                    {
                        Polynomial deserializedPoly = Load.Polynomial(polyFilename);
                        gnfs.PolynomialCollection.Add(deserializedPoly);
                    }
                    else
                    {
                        finished = true;
                    }
                }while (!finished);

                gnfs.CurrentPolynomial = gnfs.PolynomialCollection.First();

                Load.FactorBase(ref gnfs);

                Load.FactorPair.Rational(ref gnfs);
                Load.FactorPair.Algebraic(ref gnfs);
                Load.FactorPair.Quadratic(ref gnfs);

                gnfs.CurrentRelationsProgress._gnfs = gnfs;

                Load.Relations.Smooth(ref gnfs);
                Load.Relations.Rough(ref gnfs);
                Load.Relations.Free(ref gnfs);

                return(gnfs);
            }
Esempio n. 17
0
                    public static void Append(GNFS gnfs, Relation relation)
                    {
                        if (relation != null && relation.IsSmooth && !relation.IsPersisted)
                        {
                            string filename = Path.Combine(gnfs.SaveLocations.SaveDirectory, $"{nameof(RelationContainer.SmoothRelations)}.json");
                            string json     = JsonConvert.SerializeObject(relation, Formatting.Indented);

                            if (FileExists(gnfs))
                            {
                                json = json.Insert(0, ",");
                            }

                            File.AppendAllText(filename, json);

                            gnfs.CurrentRelationsProgress.SmoothRelationsCounter += 1;

                            relation.IsPersisted = true;
                        }
                    }
Esempio n. 18
0
        public static List <Relation> MultiplyLikeRoughNumbers(GNFS gnfs, List <Relation[]> likeRoughNumbersGroups)
        {
            List <Relation> result = new List <Relation>();

            foreach (Relation[] likePair in likeRoughNumbersGroups)
            {
                var As = likePair.Select(lp => lp.A).ToList();
                var Bs = likePair.Select(lp => lp.B).ToList();

                int  a = (int)(As[0] + Bs[0]) * (int)(As[0] - Bs[0]);   //(int)Math.Round(Math.Sqrt(As.Sum()));
                uint b = (uint)(As[1] + Bs[1]) * (uint)(As[1] - Bs[1]); //(int)Math.Round(Math.Sqrt(Bs.Sum()));

                if (a > 0 && b > 0)
                {
                    result.Add(new Relation(gnfs, a, b));
                }
            }

            return(result);
        }
Esempio n. 19
0
File: Relation.cs Progetto: be4/GNFS
        public Relation(GNFS gnfs, int a, uint b)
            : this()
        {
            A = a;
            B = b;

            AlgebraicNorm = Normal.Algebraic(A, B, gnfs.CurrentPolynomial);        // b^deg * f( a/b )
            RationalNorm  = Normal.Rational(A, B, gnfs.PolynomialBase);            // a + bm

            AlgebraicQuotient = BigInteger.Abs(AlgebraicNorm);
            RationalQuotient  = BigInteger.Abs(RationalNorm);

            if (AlgebraicNorm.Sign == -1)
            {
                AlgebraicFactorization.Add(BigInteger.MinusOne);
            }

            if (RationalNorm.Sign == -1)
            {
                RationalFactorization.Add(BigInteger.MinusOne);
            }
        }
Esempio n. 20
0
        public PolyRelationsSieveProgress(GNFS gnfs, int smoothRelationsTargetQuantity, BigInteger valueRange)
        {
            _gnfs     = gnfs;
            Relations = new RelationContainer();

            A          = 0;
            B          = 3;
            ValueRange = valueRange;

            if (smoothRelationsTargetQuantity == -1)
            {
                SmoothRelations_TargetQuantity = SmoothRelationsRequiredForMatrixStep;
            }
            else
            {
                SmoothRelations_TargetQuantity = smoothRelationsTargetQuantity;
            }

            if (MaxB == 0)
            {
                MaxB = (uint)gnfs.PrimeFactorBase.AlgebraicFactorBaseMax;
            }
        }
Esempio n. 21
0
                public static void Free(ref GNFS gnfs)
                {
                    if (gnfs.CurrentRelationsProgress.Relations.FreeRelations.Any(lst => lst.Any(rel => !rel.IsPersisted)))
                    {
                        List <List <Relation> > unsaved = gnfs.CurrentRelationsProgress.Relations.FreeRelations.Where(lst => lst.Any(rel => !rel.IsPersisted)).ToList();
                        foreach (List <Relation> solution in unsaved)
                        {
                            Serialization.Save.Object(solution, Path.Combine(gnfs.SaveLocations.SaveDirectory, $"!!UNSAVED__{nameof(RelationContainer.FreeRelations)}.json"));
                        }
                    }

                    gnfs.CurrentRelationsProgress.Relations.FreeRelations.Clear();
                    gnfs.CurrentRelationsProgress.FreeRelationsCounter = 0;

                    IEnumerable <string> freeRelations = Directory.EnumerateFiles(gnfs.SaveLocations.SaveDirectory, $"{nameof(RelationContainer.FreeRelations)}_*.json");

                    foreach (string solution in freeRelations)
                    {
                        List <Relation> temp = Load.Generic <List <Relation> >(solution);
                        temp.ForEach(rel => rel.IsPersisted = true);
                        gnfs.CurrentRelationsProgress.Relations.FreeRelations.Add(temp);
                        gnfs.CurrentRelationsProgress.FreeRelationsCounter += 1;
                    }
                }
Esempio n. 22
0
 public static void FactorBase(ref GNFS gnfs)
 {
     gnfs.SetPrimeFactorBases();
 }
Esempio n. 23
0
 public PolyRelationsSieveProgress(GNFS gnfs, BigInteger valueRange)
     : this(gnfs, -1, valueRange)
 {
 }
Esempio n. 24
0
 public static void Gnfs(GNFS gnfs)
 {
     Save.Object(gnfs, gnfs.SaveLocations.GnfsParameters_SaveFile);
 }