Advertisement
Guest User

Untitled

a guest
Sep 19th, 2019
86
0
Never
Not a member of Pastebin yet? Sign Up, it unlocks many cool features!
text 3.01 KB | None | 0 0
  1. using System;
  2. using System.Collections.Generic;
  3. using System.Linq;
  4. using System.Collections;
  5.  
  6. namespace ConsoleApp2
  7. {
  8. class Progam
  9. {
  10. public static void Main()
  11. {
  12. var result = FindNumbers();
  13. Console.WriteLine(result[0]);
  14. Console.WriteLine(result[1]);
  15. Console.WriteLine(result[2]);
  16. Console.WriteLine(result[3]);
  17. Console.ReadKey();
  18. }
  19. private static int[] FindNumbers()
  20. {
  21. var result = new int[5];
  22. for (var i = 100000; i < 150000; i++)
  23. {
  24. if (Check(i, i + 1, i + 2, i + 3).Length == 4)
  25. result = Check(i, i + 1, i + 2, i + 3);
  26. }
  27. return result;
  28. }
  29. private static int[] Check(int first, int second, int third, int forth)
  30. {
  31. var primeList = CreatePrimeList(100000);
  32. var firstPrimes = FindPrimes(primeList, first);
  33. var secondPrimes = FindPrimes(primeList, second);
  34. var thirdPrimes = FindPrimes(primeList, third);
  35. var forthPrimes = FindPrimes(primeList, forth);
  36. var AllPrimes = forthPrimes.Concat(thirdPrimes.Concat(firstPrimes.Concat(secondPrimes))).ToArray();
  37. if (AllPrimes.Length == 16)
  38. return new int[4] { first, second, third, forth };
  39. else return new int[1] { 0 };
  40. }
  41. private static int[] FindPrimes(int[] primes, int number)
  42. {
  43. var result = new List<int>();
  44. while (number > 1)
  45. {
  46. for (var i = 0; i < primes.Length; i++)
  47. {
  48. if (result.Count > 3)
  49. break;
  50. if (number % primes[i] == 0)
  51. result.Add(primes[i]);
  52. while (number % primes[i] == 0)
  53. number /= primes[i];
  54. }
  55. break;
  56. }
  57. return result.ToArray();
  58. }
  59. private static int[] CreatePrimeList(int upperLimit)
  60. {
  61.  
  62. int sieveBound = (int)(upperLimit - 1) / 2;
  63. int upperSqrt = ((int)Math.Sqrt(upperLimit) - 1) / 2;
  64.  
  65. BitArray PrimeBits = new BitArray(sieveBound + 1, true);
  66.  
  67. for (int i = 1; i <= upperSqrt; i++)
  68. {
  69. if (PrimeBits.Get(i))
  70. {
  71. for (int j = i * 2 * (i + 1); j <= sieveBound; j += 2 * i + 1)
  72. {
  73. PrimeBits.Set(j, false);
  74. }
  75. }
  76. }
  77.  
  78. List<int> numbers = new List<int>((int)(upperLimit / (Math.Log(upperLimit) - 1.08366)));
  79. numbers.Add(2);
  80. for (int i = 1; i <= sieveBound; i++)
  81. {
  82. if (PrimeBits.Get(i))
  83. {
  84. numbers.Add(2 * i + 1);
  85. }
  86. }
  87.  
  88. return numbers.ToArray();
  89. }
  90. }
  91. }
Advertisement
Add Comment
Please, Sign In to add comment
Advertisement