Humble numbers: Difference between revisions
Content added Content deleted
m (→{{header|Factor}}: reduce output size) |
|||
Line 116: | Line 116: | ||
8 1272 |
8 1272 |
||
9 1767</pre> |
9 1767</pre> |
||
=={{header|C}}== |
|||
{{trans|C++}} |
|||
<lang C>#include <limits.h> |
|||
#include <stdbool.h> |
|||
#include <stdio.h> |
|||
#include <string.h> |
|||
bool isHumble(int i) { |
|||
if (i <= 1) return true; |
|||
if (i % 2 == 0) return isHumble(i / 2); |
|||
if (i % 3 == 0) return isHumble(i / 3); |
|||
if (i % 5 == 0) return isHumble(i / 5); |
|||
if (i % 7 == 0) return isHumble(i / 7); |
|||
return false; |
|||
} |
|||
int main() { |
|||
int limit = SHRT_MAX; |
|||
int humble[16]; |
|||
int count = 0; |
|||
int num = 1; |
|||
char buffer[16]; |
|||
memset(humble, 0, sizeof(humble)); |
|||
for (; count < limit; num++) { |
|||
if (isHumble(num)) { |
|||
size_t len; |
|||
sprintf_s(buffer, sizeof(buffer), "%d", num); |
|||
len = strlen(buffer); |
|||
if (len >= 16) { |
|||
break; |
|||
} |
|||
humble[len]++; |
|||
if (count < 50) { |
|||
printf("%d ", num); |
|||
} |
|||
count++; |
|||
} |
|||
} |
|||
printf("\n\n"); |
|||
printf("Of the first %d humble numbers:\n", count); |
|||
for (num = 1; num < 10; num++) { |
|||
printf("%5d have %d digits\n", humble[num], num); |
|||
} |
|||
return 0; |
|||
}</lang> |
|||
{{out}} |
|||
<pre>1 2 3 4 5 6 7 8 9 10 12 14 15 16 18 20 21 24 25 27 28 30 32 35 36 40 42 45 48 49 50 54 56 60 63 64 70 72 75 80 81 84 90 96 98 100 105 108 112 120 |
|||
Of the first 32767 humble numbers: |
|||
9 have 1 digits |
|||
36 have 2 digits |
|||
95 have 3 digits |
|||
197 have 4 digits |
|||
356 have 5 digits |
|||
579 have 6 digits |
|||
882 have 7 digits |
|||
1272 have 8 digits |
|||
1767 have 9 digits</pre> |
|||
=={{header|C++}}== |
=={{header|C++}}== |