C# solutions to Project Euler problems.
You can not select more than 25 topics Topics must start with a letter or number, can include dashes ('-') and can be up to 35 characters long.

144 lines
2.9 KiB

4 years ago
4 years ago
4 years ago
4 years ago
4 years ago
  1. using System;
  2. using System.Collections.Generic;
  3. using static System.Console;
  4. namespace Euler {
  5. class Program {
  6. static long Problem1() {
  7. long sum = 0;
  8. for (long i = 1; i < 1000; i++) {
  9. if (i % 3 == 0 || i % 5 == 0) {
  10. sum += i;
  11. }
  12. }
  13. return sum;
  14. }
  15. static long Problem2() {
  16. long max = 4_000_000;
  17. var fibs = new List<long>();
  18. fibs.Add(1);
  19. fibs.Add(2);
  20. while (fibs[fibs.Count - 1] < max) {
  21. long num = fibs[fibs.Count - 1] + fibs[fibs.Count - 2];
  22. fibs.Add(num);
  23. }
  24. long sum = 0;
  25. foreach (int i in fibs) {
  26. if (i % 2 == 0 && i <= max) {
  27. sum += i;
  28. }
  29. }
  30. return sum;
  31. }
  32. static bool IsPrime(long num, List<long> primes) {
  33. foreach (long i in primes) {
  34. if (num % i == 0) {
  35. return false;
  36. }
  37. }
  38. return true;
  39. }
  40. static List<long> PrimesUpThrough(long num) {
  41. var primes = new List<long>();
  42. primes.Add(2);
  43. for (int i = 3; i <= num; i += 2) {
  44. if (IsPrime(i, primes)) {
  45. primes.Add(i);
  46. }
  47. }
  48. return primes;
  49. }
  50. static List<long> FirstNPrimes(long n) {
  51. var primes = new List<long>();
  52. primes.Add(2);
  53. for (int i = 3; ; i += 2) {
  54. if (IsPrime(i, primes)) {
  55. primes.Add(i);
  56. if (primes.Count == n) {
  57. return primes;
  58. }
  59. }
  60. }
  61. }
  62. static long Problem3() {
  63. long target = 600_851_475_143;
  64. long targetSqrt = (long) Math.Sqrt(target);
  65. List<long> primes = PrimesUpThrough(targetSqrt);
  66. long highestPrimeFactor = 0;
  67. foreach (long i in primes) {
  68. if (target % i == 0) {
  69. highestPrimeFactor = i;
  70. }
  71. }
  72. return highestPrimeFactor;
  73. }
  74. static bool IsPalindromicNumber(long l) {
  75. string s = "" + l;
  76. for (int i = 0; i < s.Length / 2; i++) {
  77. if (s[i] != s[s.Length - i - 1]) {
  78. return false;
  79. }
  80. }
  81. return true;
  82. }
  83. static long Problem4() {
  84. long largest = 0;
  85. for (long i = 999; i >= 100; i--) {
  86. for (long j = 999; j >= 100; j--) {
  87. long target = i * j;
  88. if (target < largest) {
  89. continue;
  90. }
  91. if (IsPalindromicNumber(target)) {
  92. largest = target;
  93. }
  94. }
  95. }
  96. return largest;
  97. }
  98. static long Problem5() {
  99. for (long test = 20; ; test += 20) {
  100. for (int i = 2; i <= 20; i++) {
  101. if (test % i != 0) {
  102. break;
  103. }
  104. if (i == 20) {
  105. return test;
  106. }
  107. }
  108. }
  109. }
  110. static long Problem6() {
  111. long sum = 0;
  112. long sumSq = 0;
  113. for (long i = 1; i <= 100; i++) {
  114. sum += i;
  115. sumSq += i * i;
  116. }
  117. return sum * sum - sumSq;
  118. }
  119. static long Problem7() {
  120. List<long> primes = FirstNPrimes(10001);
  121. return primes[primes.Count - 1];
  122. }
  123. static void Main(string[] args) {
  124. WriteLine(Problem7());
  125. }
  126. }
  127. }