Advertisement
Not a member of Pastebin yet?
Sign Up,
it unlocks many cool features!
- using System;
- using System.Collections.Generic;
- using System.Linq;
- using System.Collections;
- namespace ConsoleApp2
- {
- class Progam
- {
- public static void Main()
- {
- var result = FindNumbers();
- Console.WriteLine(result[0]);
- Console.WriteLine(result[1]);
- Console.WriteLine(result[2]);
- Console.WriteLine(result[3]);
- Console.ReadKey();
- }
- private static int[] FindNumbers()
- {
- var result = new int[5];
- for (var i = 100000; i < 150000; i++)
- {
- if (Check(i, i + 1, i + 2, i + 3).Length == 4)
- result = Check(i, i + 1, i + 2, i + 3);
- }
- return result;
- }
- private static int[] Check(int first, int second, int third, int forth)
- {
- var primeList = CreatePrimeList(100000);
- var firstPrimes = FindPrimes(primeList, first);
- var secondPrimes = FindPrimes(primeList, second);
- var thirdPrimes = FindPrimes(primeList, third);
- var forthPrimes = FindPrimes(primeList, forth);
- var AllPrimes = forthPrimes.Concat(thirdPrimes.Concat(firstPrimes.Concat(secondPrimes))).ToArray();
- if (AllPrimes.Length == 16)
- return new int[4] { first, second, third, forth };
- else return new int[1] { 0 };
- }
- private static int[] FindPrimes(int[] primes, int number)
- {
- var result = new List<int>();
- while (number > 1)
- {
- for (var i = 0; i < primes.Length; i++)
- {
- if (result.Count > 3)
- break;
- if (number % primes[i] == 0)
- result.Add(primes[i]);
- while (number % primes[i] == 0)
- number /= primes[i];
- }
- break;
- }
- return result.ToArray();
- }
- private static int[] CreatePrimeList(int upperLimit)
- {
- int sieveBound = (int)(upperLimit - 1) / 2;
- int upperSqrt = ((int)Math.Sqrt(upperLimit) - 1) / 2;
- BitArray PrimeBits = new BitArray(sieveBound + 1, true);
- for (int i = 1; i <= upperSqrt; i++)
- {
- if (PrimeBits.Get(i))
- {
- for (int j = i * 2 * (i + 1); j <= sieveBound; j += 2 * i + 1)
- {
- PrimeBits.Set(j, false);
- }
- }
- }
- List<int> numbers = new List<int>((int)(upperLimit / (Math.Log(upperLimit) - 1.08366)));
- numbers.Add(2);
- for (int i = 1; i <= sieveBound; i++)
- {
- if (PrimeBits.Get(i))
- {
- numbers.Add(2 * i + 1);
- }
- }
- return numbers.ToArray();
- }
- }
- }
Advertisement
Add Comment
Please, Sign In to add comment
Advertisement