fork download
  1. using System;
  2. using System.Collections;
  3. using System.Collections.Generic;
  4. using System.Linq;
  5.  
  6. /*
  7. 2018までの素数は2~2017まで306個あって、小さいものから累計してゆくと
  8. 33個で1988、34個で2127になるので、最大で33個の組み合わせまでが想定される
  9. */
  10. class Program
  11. {
  12. static void Main(string[] args)
  13. {
  14. new Program().boot();
  15. }
  16.  
  17. public void boot()
  18. {
  19. BitArray sieve = new BitArray(2018 + 1, true);
  20. for (int i = 2; i <= Math.Sqrt(2018); i++)
  21. {
  22. int j = i + i;
  23. while (j <= 2018)
  24. {
  25. sieve[j] = false;
  26. j += i;
  27. }
  28. }
  29.  
  30. List<int> list = new List<int>();
  31. for (int i = 2; i <= 2018; i++)
  32. {
  33. if (sieve[i])
  34. {
  35. list.Add(i);
  36. }
  37. }
  38.  
  39. //Console.WriteLine(string.Join(",", list));
  40. //Console.WriteLine(list.Count);
  41.  
  42. int level = 33;
  43. foreach (var item in list)
  44. {
  45. loop(list, item, level - 1);
  46. }
  47. }
  48.  
  49. Stack<int> items = new Stack<int>();
  50.  
  51. bool loop(IEnumerable<int> list, int item, int level)
  52. {
  53. bool flag = false;
  54.  
  55. items.Push(item);
  56. if (level == 1)
  57. {
  58. int last = 2018 - items.Sum();
  59. if (last <= 2 || items.First() >= last)
  60. {
  61. flag = true;
  62. }
  63. else if (list.Contains(last))
  64. {
  65. items.Push(last);
  66. Console.WriteLine(items.Count() + "|" + string.Join(",", items.Reverse()));
  67. items.Pop();
  68. }
  69. }
  70. else
  71. {
  72. IEnumerable<int> list2 = list.Where(x => item < x);
  73. foreach (var item2 in list2)
  74. {
  75. if (loop(list2, item2, level - 1))
  76. {
  77. break;
  78. }
  79. }
  80. }
  81. items.Pop();
  82.  
  83. return flag;
  84. }
  85. }
Time limit exceeded #stdin #stdout 5s 21040KB
stdin
Standard input is empty
stdout
33|2,3,5,7,11,13,17,19,23,29,31,37,41,43,47,53,59,61,67,71,73,79,83,89,97,101,103,107,109,113,127,131,167
33|2,3,5,7,11,13,17,19,23,29,31,37,41,43,47,53,59,61,67,71,73,79,83,89,97,101,103,107,109,113,131,137,157
33|2,3,5,7,11,13,17,19,23,29,31,37,41,43,47,53,59,61,67,71,73,79,83,89,97,101,103,107,109,113,137,139,149
33|2,3,5,7,11,13,17,19,23,29,31,37,41,43,47,53,59,61,67,71,73,79,83,89,97,101,103,107,113,127,131,137,139