Advertisement
Not a member of Pastebin yet?
Sign Up,
it unlocks many cool features!
- using Mpir.NET;
- using System;
- using System.Collections.Generic;
- using System.Diagnostics;
- using System.Threading.Tasks;
- namespace MersenneHint
- {
- class Program
- {
- static void Main(string[] args)
- {
- var logFactor = Math.Log10(2);
- int i = 0;
- var primes = GetPrimes(74000000, 75000000);
- var sw = Stopwatch.StartNew();
- Parallel.ForEach(primes, p =>
- {
- lock(lockObj) i++;
- if (i % 100 == 0)
- Console.WriteLine(sw.Elapsed + ": " + i);
- var digits = (int)Math.Floor(p * logFactor) + 1;
- using (var tenPowerEnd = mpz_t.Ten.Power(digits - 19391387 + 1))
- using (var twoPowerMod = mpz_t.Two.PowerMod(p, tenPowerEnd))
- using (var powMinOne = twoPowerMod - 1)
- using (var tenPowerStart = mpz_t.Ten.Power(digits - 19391387 + 1 - 7))
- using (var div = powMinOne.Divide(tenPowerStart))
- {
- var mpSecStr = div.ToString();
- if (mpSecStr == "2718281")
- Console.WriteLine(p);
- }
- });
- Console.WriteLine("done");
- Console.ReadLine();
- }
- static readonly object lockObj = new object();
- static IList<int> GetPrimes(int from, int to)
- {
- var primes = new List<int>();
- for (mpz_t i = new mpz_t(from).NextPrimeGMP(); i <= to; i = i.NextPrimeGMP())
- {
- if (i.ToString().Contains("42") && !alreadyFactored.Contains((int)i))
- primes.Add((int)i);
- }
- return primes;
- }
- static readonly HashSet<int> alreadyFactored = new HashSet<int> { ..... }; // pastebin doesn't like this crazy long list, fill it in yourself from http://www.mersenne.org/report_factors/
- }
- }
Advertisement
Add Comment
Please, Sign In to add comment
Advertisement