public void TrefferBestimmenGrobTest() { int n = 499 * 41; List <Zyklus> result = FermatExtended.TrefferBestimmen(n, new int[] { 10 }); List <FermatExtended.MddPaarImZahlensystem> paare = FermatExtended.mdPaareBestimmen(n, new int[] { 10 }); List <Tuple <int, int, int> > vergleichsliste = new List <Tuple <int, int, int> >(); int m = (int)Math.Sqrt(n) + 1; FermatExtended.MddPaarImZahlensystem aktuellesPaar = paare[0]; for (int i = 0; i < (aktuellesPaar.Zahlensystem); i++) { int dd = m * m - n; if (aktuellesPaar.MddPaar.Exists(x => ((x.Item1 == m % aktuellesPaar.Zahlensystem) && (x.Item2 == dd % aktuellesPaar.Zahlensystem)))) { vergleichsliste.Add(new Tuple <int, int, int>(m % aktuellesPaar.Zahlensystem, dd % aktuellesPaar.Zahlensystem, i)); } m++; } vergleichsliste.Add(new Tuple <int, int, int>(0, 0, aktuellesPaar.Zahlensystem + vergleichsliste[0].Item3)); Zyklus aktuellerZyklus = result[0]; for (int i = 0; i < aktuellerZyklus.NumberOfElements; i++) { Assert.IsTrue(vergleichsliste[i].Item3 == aktuellerZyklus.Elemente[i]); } }
private FermatExtended.MddPaarImZahlensystem BerechneMDInternal(int n, int zahlensystem) { int m; int d1; int d2; int dd; //int potenz = zahlensystem * zahlensystem; FermatExtended.MddPaarImZahlensystem mddPaareImZahlensystem = new FermatExtended.MddPaarImZahlensystem(zahlensystem); List <Tuple <int, int> > endungen = FermatExtended.EndungenBestimmen(n, zahlensystem); foreach (Tuple <int, int> endung in endungen) { // aller Wahrscheinlichkeit nach reichen zwei Überprüfungen // 0*10**1+X+Y // 1*10**1+X+Y for (int i = 0; i < zahlensystem; i++) { for (int j = 0; j < zahlensystem; j++) { m = ((((i * zahlensystem) + endung.Item1) + ((j * zahlensystem) + endung.Item2)) / 2) % zahlensystem; d1 = ((((i * zahlensystem) + endung.Item1) - ((j * zahlensystem) + endung.Item2)) / 2) % zahlensystem; d2 = ((((i * zahlensystem) + endung.Item2) - ((j * zahlensystem) + endung.Item1)) / 2) % zahlensystem; if (d1 < 0) { d1 += zahlensystem; } if (d2 < 0) { d2 += zahlensystem; } // pruefen, ob "m" eine Ganzzahl geblieben ist, sonst kann das Ergebnis verworfen werden if (((2 * m) % zahlensystem) == (((i * zahlensystem) + endung.Item1) + ((j * zahlensystem) + endung.Item2)) % zahlensystem) { dd = (d1 * d1) % zahlensystem; if (!mddPaareImZahlensystem.MddPaar.Exists(x => x.Item1 == m && x.Item2 == dd)) { mddPaareImZahlensystem.MddPaar.Add(new Tuple <int, int>(m, dd)); } dd = (d2 * d2) % zahlensystem; if (!mddPaareImZahlensystem.MddPaar.Exists(x => x.Item1 == m && x.Item2 == dd)) { mddPaareImZahlensystem.MddPaar.Add(new Tuple <int, int>(m, dd)); } } } } } return(mddPaareImZahlensystem); }
public void mdPaareBestimmenTest() { int zahlensystem = 10; int n = 43 * 971; List <FermatExtended.MddPaarImZahlensystem> actual = FermatExtended.mdPaareBestimmen(n, new int[] { zahlensystem }); FermatExtended.MddPaarImZahlensystem expected = this.BerechneMDInternal(n, zahlensystem); Assert.IsTrue(actual[0].MddPaar.Count == expected.MddPaar.Count); for (int i = 0; i < expected.MddPaar.Count; i++) { Assert.IsTrue(actual[0].MddPaar.Exists(x => ((x.Item1 == expected.MddPaar[i].Item1) && (x.Item2 == expected.MddPaar[i].Item2)))); } }