fork download
  1. #include <iostream>
  2. #include <cassert>
  3.  
  4. const int maxprime = 65536;
  5.  
  6. int primes[maxprime];
  7. int nprimes;
  8.  
  9. void findPrimes() {
  10. std::cout << "Searching prime numbers ..." << std::endl;
  11. bool *sieve = new bool[maxprime+1];
  12. int i;
  13. for (i=0;i<maxprime;i++)
  14. sieve[i] = 0;
  15. i = 2;
  16. nprimes = 0;
  17. while (1) {
  18. while (i<maxprime && sieve[i])
  19. i++;
  20. if (i>=maxprime)
  21. break;
  22. primes[nprimes++] = i;
  23. for (int j=i*2; j<maxprime; j+=i)
  24. sieve[j] = 1;
  25. i++;
  26. }
  27. std::cout << nprimes << " primes found" << std::endl;
  28. delete sieve;
  29. }
  30.  
  31. int sumDiv(int a) {
  32. int i, r=1, b=a;
  33. int *pr = primes;
  34. while (b > 1) {
  35. int p = *pr++, s = 1;
  36. if (p*p > b)
  37. return r * (b+1) - a;
  38. while (b % p == 0) {
  39. b /= p;
  40. s = s*p + 1;
  41. }
  42. r *= s;
  43. }
  44. return r - a;
  45. }
  46.  
  47. int main() {
  48. findPrimes();
  49. int cnt = 0;
  50. for (int a=1; ; a++) {
  51. int b = sumDiv(a);
  52. if (a < b && sumDiv(b) == a) {
  53. cnt++;
  54. std::cout << cnt << " (" << a << ", " << b << ")" << std::endl;
  55. if (cnt == 60)
  56. break;
  57. }
  58. }
  59. return 0;
  60. }
Success #stdin #stdout 4.04s 3112KB
stdin
Standard input is empty
stdout
Searching prime numbers ...
6542 primes found
1 (220, 284)
2 (1184, 1210)
3 (2620, 2924)
4 (5020, 5564)
5 (6232, 6368)
6 (10744, 10856)
7 (12285, 14595)
8 (17296, 18416)
9 (63020, 76084)
10 (66928, 66992)
11 (67095, 71145)
12 (69615, 87633)
13 (79750, 88730)
14 (100485, 124155)
15 (122265, 139815)
16 (122368, 123152)
17 (141664, 153176)
18 (142310, 168730)
19 (171856, 176336)
20 (176272, 180848)
21 (185368, 203432)
22 (196724, 202444)
23 (280540, 365084)
24 (308620, 389924)
25 (319550, 430402)
26 (356408, 399592)
27 (437456, 455344)
28 (469028, 486178)
29 (503056, 514736)
30 (522405, 525915)
31 (600392, 669688)
32 (609928, 686072)
33 (624184, 691256)
34 (635624, 712216)
35 (643336, 652664)
36 (667964, 783556)
37 (726104, 796696)
38 (802725, 863835)
39 (879712, 901424)
40 (898216, 980984)
41 (947835, 1125765)
42 (998104, 1043096)
43 (1077890, 1099390)
44 (1154450, 1189150)
45 (1156870, 1292570)
46 (1175265, 1438983)
47 (1185376, 1286744)
48 (1280565, 1340235)
49 (1328470, 1483850)
50 (1358595, 1486845)
51 (1392368, 1464592)
52 (1466150, 1747930)
53 (1468324, 1749212)
54 (1511930, 1598470)
55 (1669910, 2062570)
56 (1798875, 1870245)
57 (2082464, 2090656)
58 (2236570, 2429030)
59 (2652728, 2941672)
60 (2723792, 2874064)