• Source
    1.  
    2. #include <stdlib.h>
    3. #include <stdio.h>
    4.  
    5. int lprime(int n) {
    6. int max = -1;
    7.  
    8. if (n < 2) return n;
    9.  
    10. while (n % 2 == 0) {
    11. max = 2;
    12. n /= 2;
    13. }
    14.  
    15. for (int i = 3; i*i <= n; i += 2) {
    16. while (n % i == 0) {
    17. max = i;
    18. n = n / i;
    19. }
    20. }
    21.  
    22. if (n > 2) {
    23. max = n;
    24. }
    25.  
    26. return max;
    27. }
    28.  
    29. int unus(int n) {
    30. int factor = lprime(n);
    31.  
    32. return (factor * factor > n);
    33. }
    34.  
    35. int del(int num, int n)
    36. {
    37. int revnew = 0;
    38. int new = 0;
    39. int d = 0;
    40.  
    41. for (int i = 0; num != 0; i++) {
    42. if (i != n) {
    43. revnew = (revnew * 10) + num % 10;
    44. d++;
    45. }
    46.  
    47. num = num / 10;
    48. }
    49.  
    50. while (d--) {
    51. new = new * 10 + revnew % 10;
    52. revnew = revnew / 10;
    53. }
    54.  
    55. return new;
    56. }
    57.  
    58. int dlog(int m) {
    59. if (m < 10) return 0;
    60. if (m < 100) return 1;
    61. if (m < 1000) return 2;
    62. if (m < 10000) return 3;
    63. if (m < 100000) return 4;
    64. if (m < 1000000) return 5;
    65. if (m < 10000000) return 6;
    66. if (m < 100000000) return 7;
    67. if (m < 1000000000) return 8;
    68. return 9;
    69. }
    70.  
    71. int is_superunusual(int m)
    72. {
    73. int d = dlog(m) + 1;
    74.  
    75. if (unus(m) == 0) return 0;
    76.  
    77. for (int i = 0; i < d; i++) {
    78. int nmin = del(m, i);
    79.  
    80. if (unus(nmin) == 0) return 0;
    81. }
    82.  
    83. return 1;
    84. }
    85.  
    86. int nth_su(int n)
    87. {
    88. int m = 10;
    89. int counter = 0;
    90.  
    91. while (counter < n) {
    92. if (is_superunusual(m++)) {
    93. counter++;
    94. printf("%d: %d\n", counter, m - 1);
    95. }
    96. }
    97.  
    98. return m - 1;
    99. }
    100.  
    101. int main(void)
    102. {
    103. nth_su(100);
    104.  
    105. return 0;
    106. }
    107.