fork(1) download
  1. #include <iostream>
  2. #include <iomanip>
  3. #include <vector>
  4. #include <numeric>
  5. #include <cmath>
  6.  
  7. namespace Chapter7
  8. {
  9. class Exercise3
  10. {
  11. public:
  12. void Find(int lo, int hi, std::ostream& out = std::cout);
  13.  
  14. private:
  15. std::vector<int> factors_;
  16. bool IsPrime(int candidate);
  17. void GetFactors(int candidate);
  18. };
  19. }
  20.  
  21. int main()
  22. {
  23. Chapter7::Exercise3 solver;
  24. solver.Find(1, 1000);
  25. }
  26.  
  27. void Chapter7::Exercise3::Find(int lo, int hi, std::ostream& out)
  28. {
  29. int sum;
  30. for (int i = lo; i <= hi; ++i) {
  31. GetFactors(i);
  32. sum = std::accumulate(factors_.begin(), factors_.end(), 0);
  33. if (IsPrime(sum)) {
  34. out << std::setw(4) << i << ". ";
  35. if (factors_.size() != 1) {
  36. std::vector<int>::iterator elem = factors_.begin();
  37. out << *elem;
  38. for (++elem; elem < factors_.end(); ++elem) {
  39. out << " + " << *elem;
  40. }
  41. out << " = " << sum;
  42. }
  43. out << std::endl;
  44. }
  45. }
  46. }
  47.  
  48. bool Chapter7::Exercise3::IsPrime(int candidate)
  49. {
  50. if (candidate <= 1) return false; // candidate is not prime by definition
  51. if (candidate == 2) return true;
  52. if ((candidate & 1) == 0) return false; // even cadidate
  53.  
  54. double root = std::sqrt(candidate);
  55. for (int i = 3; i <= root; i += 2) {
  56. if (candidate % i == 0) {
  57. return false;
  58. }
  59. }
  60. return true;
  61. }
  62.  
  63. void Chapter7::Exercise3::GetFactors(int candidate)
  64. {
  65. int i = 2;
  66. factors_.clear();
  67. while (candidate > 1) {
  68. while (candidate % i == 0) {
  69. factors_.push_back(i);
  70. candidate /= i;
  71. }
  72. ++i;
  73. }
  74. }
  75.  
Success #stdin #stdout 0s 3464KB
stdin
Standard input is empty
stdout
   2. 
   3. 
   5. 
   6. 2 + 3 = 5
   7. 
  10. 2 + 5 = 7
  11. 
  12. 2 + 2 + 3 = 7
  13. 
  17. 
  19. 
  22. 2 + 11 = 13
  23. 
  28. 2 + 2 + 7 = 11
  29. 
  31. 
  34. 2 + 17 = 19
  37. 
  40. 2 + 2 + 2 + 5 = 11
  41. 
  43. 
  45. 3 + 3 + 5 = 11
  47. 
  48. 2 + 2 + 2 + 2 + 3 = 11
  52. 2 + 2 + 13 = 17
  53. 
  54. 2 + 3 + 3 + 3 = 11
  56. 2 + 2 + 2 + 7 = 13
  58. 2 + 29 = 31
  59. 
  61. 
  63. 3 + 3 + 7 = 13
  67. 
  71. 
  73. 
  75. 3 + 5 + 5 = 13
  76. 2 + 2 + 19 = 23
  79. 
  80. 2 + 2 + 2 + 2 + 5 = 13
  82. 2 + 41 = 43
  83. 
  88. 2 + 2 + 2 + 11 = 17
  89. 
  90. 2 + 3 + 3 + 5 = 13
  96. 2 + 2 + 2 + 2 + 2 + 3 = 13
  97. 
  99. 3 + 3 + 11 = 17
 101. 
 103. 
 104. 2 + 2 + 2 + 13 = 19
 107. 
 108. 2 + 2 + 3 + 3 + 3 = 13
 109. 
 113. 
 117. 3 + 3 + 13 = 19
 118. 2 + 59 = 61
 127. 
 131. 
 136. 2 + 2 + 2 + 17 = 23
 137. 
 139. 
 142. 2 + 71 = 73
 147. 3 + 7 + 7 = 17
 148. 2 + 2 + 37 = 41
 149. 
 151. 
 153. 3 + 3 + 17 = 23
 157. 
 163. 
 165. 3 + 5 + 11 = 19
 167. 
 172. 2 + 2 + 43 = 47
 173. 
 175. 5 + 5 + 7 = 17
 176. 2 + 2 + 2 + 2 + 11 = 19
 179. 
 181. 
 184. 2 + 2 + 2 + 23 = 29
 191. 
 193. 
 197. 
 198. 2 + 3 + 3 + 11 = 19
 199. 
 202. 2 + 101 = 103
 207. 3 + 3 + 23 = 29
 210. 2 + 3 + 5 + 7 = 17
 211. 
 214. 2 + 107 = 109
 223. 
 224. 2 + 2 + 2 + 2 + 2 + 7 = 17
 227. 
 229. 
 233. 
 239. 
 241. 
 245. 5 + 7 + 7 = 19
 248. 2 + 2 + 2 + 31 = 37
 250. 2 + 5 + 5 + 5 = 17
 251. 
 252. 2 + 2 + 3 + 3 + 7 = 17
 257. 
 263. 
 268. 2 + 2 + 67 = 71
 269. 
 271. 
 273. 3 + 7 + 13 = 23
 274. 2 + 137 = 139
 277. 
 279. 3 + 3 + 31 = 37
 281. 
 283. 
 293. 
 294. 2 + 3 + 7 + 7 = 19
 296. 2 + 2 + 2 + 37 = 43
 298. 2 + 149 = 151
 300. 2 + 2 + 3 + 5 + 5 = 17
 307. 
 311. 
 313. 
 316. 2 + 2 + 79 = 83
 317. 
 320. 2 + 2 + 2 + 2 + 2 + 2 + 5 = 17
 325. 5 + 5 + 13 = 23
 328. 2 + 2 + 2 + 41 = 47
 331. 
 333. 3 + 3 + 37 = 43
 337. 
 345. 3 + 5 + 23 = 31
 347. 
 349. 
 350. 2 + 5 + 5 + 7 = 19
 353. 
 358. 2 + 179 = 181
 359. 
 360. 2 + 2 + 2 + 3 + 3 + 5 = 17
 367. 
 368. 2 + 2 + 2 + 2 + 23 = 31
 369. 3 + 3 + 41 = 47
 373. 
 376. 2 + 2 + 2 + 47 = 53
 379. 
 382. 2 + 191 = 193
 383. 
 384. 2 + 2 + 2 + 2 + 2 + 2 + 2 + 3 = 17
 385. 5 + 7 + 11 = 23
 388. 2 + 2 + 97 = 101
 389. 
 390. 2 + 3 + 5 + 13 = 23
 394. 2 + 197 = 199
 397. 
 399. 3 + 7 + 19 = 29
 401. 
 405. 3 + 3 + 3 + 3 + 5 = 17
 409. 
 412. 2 + 2 + 103 = 107
 414. 2 + 3 + 3 + 23 = 31
 416. 2 + 2 + 2 + 2 + 2 + 13 = 23
 419. 
 420. 2 + 2 + 3 + 5 + 7 = 19
 421. 
 423. 3 + 3 + 47 = 53
 424. 2 + 2 + 2 + 53 = 59
 431. 
 432. 2 + 2 + 2 + 2 + 3 + 3 + 3 = 17
 433. 
 435. 3 + 5 + 29 = 37
 436. 2 + 2 + 109 = 113
 439. 
 443. 
 448. 2 + 2 + 2 + 2 + 2 + 2 + 7 = 19
 449. 
 454. 2 + 227 = 229
 457. 
 461. 
 462. 2 + 3 + 7 + 11 = 23
 463. 
 464. 2 + 2 + 2 + 2 + 29 = 37
 467. 
 468. 2 + 2 + 3 + 3 + 13 = 23
 475. 5 + 5 + 19 = 29
 477. 3 + 3 + 53 = 59
 478. 2 + 239 = 241
 479. 
 486. 2 + 3 + 3 + 3 + 3 + 3 = 17
 487. 
 488. 2 + 2 + 2 + 61 = 67
 491. 
 499. 
 500. 2 + 2 + 5 + 5 + 5 = 19
 503. 
 504. 2 + 2 + 2 + 3 + 3 + 7 = 19
 507. 3 + 13 + 13 = 29
 508. 2 + 2 + 127 = 131
 509. 
 521. 
 522. 2 + 3 + 3 + 29 = 37
 523. 
 536. 2 + 2 + 2 + 67 = 73
 538. 2 + 269 = 271
 541. 
 547. 
 549. 3 + 3 + 61 = 67
 550. 2 + 5 + 5 + 11 = 23
 557. 
 561. 3 + 11 + 17 = 31
 562. 2 + 281 = 283
 563. 
 567. 3 + 3 + 3 + 3 + 7 = 19
 569. 
 570. 2 + 3 + 5 + 19 = 29
 571. 
 577. 
 584. 2 + 2 + 2 + 73 = 79
 587. 
 593. 
 595. 5 + 7 + 17 = 29
 599. 
 600. 2 + 2 + 2 + 3 + 5 + 5 = 19
 601. 
 603. 3 + 3 + 67 = 73
 607. 
 608. 2 + 2 + 2 + 2 + 2 + 19 = 29
 613. 
 617. 
 619. 
 622. 2 + 311 = 313
 631. 
 640. 2 + 2 + 2 + 2 + 2 + 2 + 2 + 5 = 19
 641. 
 643. 
 647. 
 651. 3 + 7 + 31 = 41
 652. 2 + 2 + 163 = 167
 653. 
 657. 3 + 3 + 73 = 79
 659. 
 660. 2 + 2 + 3 + 5 + 11 = 23
 661. 
 664. 2 + 2 + 2 + 83 = 89
 665. 5 + 7 + 19 = 31
 673. 
 675. 3 + 3 + 3 + 5 + 5 = 19
 677. 
 683. 
 684. 2 + 2 + 3 + 3 + 19 = 29
 686. 2 + 7 + 7 + 7 = 23
 691. 
 694. 2 + 347 = 349
 701. 
 704. 2 + 2 + 2 + 2 + 2 + 2 + 11 = 23
 709. 
 714. 2 + 3 + 7 + 17 = 29
 715. 5 + 11 + 13 = 29
 719. 
 720. 2 + 2 + 2 + 2 + 3 + 3 + 5 = 19
 727. 
 733. 
 739. 
 743. 
 747. 3 + 3 + 83 = 89
 751. 
 757. 
 759. 3 + 11 + 23 = 37
 761. 
 768. 2 + 2 + 2 + 2 + 2 + 2 + 2 + 2 + 3 = 19
 769. 
 772. 2 + 2 + 193 = 197
 773. 
 775. 5 + 5 + 31 = 41
 776. 2 + 2 + 2 + 97 = 103
 777. 3 + 7 + 37 = 47
 787. 
 792. 2 + 2 + 2 + 3 + 3 + 11 = 23
 795. 3 + 5 + 53 = 61
 797. 
 798. 2 + 3 + 7 + 19 = 31
 808. 2 + 2 + 2 + 101 = 107
 809. 
 810. 2 + 3 + 3 + 3 + 3 + 5 = 19
 811. 
 821. 
 823. 
 824. 2 + 2 + 2 + 103 = 109
 827. 
 829. 
 833. 7 + 7 + 17 = 31
 838. 2 + 419 = 421
 839. 
 845. 5 + 13 + 13 = 31
 847. 7 + 11 + 11 = 29
 848. 2 + 2 + 2 + 2 + 53 = 61
 850. 2 + 5 + 5 + 17 = 29
 853. 
 856. 2 + 2 + 2 + 107 = 113
 857. 
 858. 2 + 3 + 11 + 13 = 29
 859. 
 862. 2 + 431 = 433
 863. 
 864. 2 + 2 + 2 + 2 + 2 + 3 + 3 + 3 = 19
 867. 3 + 17 + 17 = 37
 873. 3 + 3 + 97 = 103
 877. 
 881. 
 883. 
 885. 3 + 5 + 59 = 67
 887. 
 891. 3 + 3 + 3 + 3 + 11 = 23
 892. 2 + 2 + 223 = 227
 903. 3 + 7 + 43 = 53
 907. 
 909. 3 + 3 + 101 = 107
 911. 
 916. 2 + 2 + 229 = 233
 919. 
 922. 2 + 461 = 463
 925. 5 + 5 + 37 = 47
 927. 3 + 3 + 103 = 109
 929. 
 930. 2 + 3 + 5 + 31 = 41
 937. 
 941. 
 944. 2 + 2 + 2 + 2 + 59 = 67
 947. 
 950. 2 + 5 + 5 + 19 = 31
 953. 
 954. 2 + 3 + 3 + 53 = 61
 957. 3 + 11 + 29 = 43
 963. 3 + 3 + 107 = 113
 967. 
 971. 
 972. 2 + 2 + 3 + 3 + 3 + 3 + 3 = 19
 977. 
 980. 2 + 2 + 5 + 7 + 7 = 23
 983. 
 991. 
 992. 2 + 2 + 2 + 2 + 2 + 31 = 41
 997.