/home/toolbox/public_html/solutions/1/136/fd.c
1 #include <stdio.h>
2 #include <string.h>
3 #include <sys/types.h>
4 #include <sys/stat.h>
5 #include <fcntl.h>
6 #include <stdint.h>
7 #include <math.h>
8 #include <stdlib.h>
9
10 #define TRUE (1 == 1)
11 #define FALSE (1 != 1)
12
13 #define DEBUG if (TRUE)
14
15
16 /*
17 * Author: Isaac Traxler
18 * Date: 2022-02-25
19 * Purpose: fun
20 * Problem: 136 - Ugly Numbers
21 */
22
23 /*
24 * This template reads data until a terminating value is reached.
25 */
26
27 /* 2147483648 */
28 #define UPPER 865000000
29 #define MAX 2147483647
30
31 int sieve[2*UPPER];
32
33 void init()
34 {
35 /* FUNCTION init */
36 int i;
37 int j;
38 int k;
39 int ti;
40 int tj;
41 int tij;
42 int ij;
43 int tmp = 0;
44 int cnt = 0;
45
46 sieve[1] = 1;
47 printf("starting setup\n");
48 for (i=7; UPPER>i; i++)
49 {
50 sieve[i] = 0;
51 }
52 for (i=2; UPPER>i; i=i*2)
53 {
54 /* do all powers of 2 */
55 sieve[i] = 1;
56 printf("sieve[%d] set: %d %d %d\n", i, i, 0, 0);
57 ti = ((UPPER + i - 1) / i);
58 for (j=3; UPPER>j; j=j*3)
59 {
60 /* do all powers of 3 */
61 sieve[j] = 1;
62 printf("sieve[%d] set: %d %d %d\n", j, 0, j, 0);
63 if (ti >= j)
64 {
65 ij = i * j;
66 sieve[ij] = 1;
67 printf("sieve[%d] set: %d %d %d\n", ij, i, j, 0);
68 }
69 tj = ((UPPER + j - 1) / j);
70 for (k=5; UPPER>k; k=k*5)
71 {
72 /* do all powers of 5 */
73 cnt++;
74 printf("ijk %d %d %d\n", i, j, k);
75 sieve[k] = 1;
76 printf("sieve[%d] set: %d %d %d\n", k, 0, 0, k);
77 if (ti >= k)
78 {
79 sieve[i*k] = 1;
80 printf("sieve[%d] set: %d %d %d\n", i*k, i, 0, k);
81 }
82 if (tj >= k)
83 {
84 sieve[j*k] = 1;
85 printf("sieve[%d] set: %d %d %d\n", j*k, 0, j, k);
86 }
87 tij = (((UPPER + i -1) / i) +j - 1) / j;
88 if (tij >= k)
89 {
90 sieve[ij*k] = 1;
91 printf("sieve[%d] set: %d %d %d (ij %d) (tij %d)\n", i*j*k, i, j, k, ij, tij);
92 }
93 if ((0 == tmp) && (1 == sieve[292986880]))
94 {
95 tmp = 1;
96 printf("XX 292986880 (cnt %d) (i %d) (j %d) (k %d)\n", cnt, i, j, k);
97 }
98 if ((1 == tmp) && (1 == sieve[585973760]))
99 {
100 tmp = 2;
101 printf("XY 585973760 (cnt %d) (i %d) (j %d) (k %d)\n", cnt, i, j, k);
102 }
103 } /* do all powers of 5 */
104 } /* do all powers of 3 */
105 } /* do all powers of 2 */
106 } /* FUNCTION init */
107
108 void process()
109 {
110 /* FUNCTION process */
111 int i;
112 int cnt;
113
114 for (i=1,cnt=0; cnt<=1500; i++)
115 {
116 /* look for non-zero values */
117 if (0 != sieve[i])
118 {
119 cnt++;
120 printf("(%d) sieve[%d] = %d\n", cnt, i, sieve[i]);
121 }
122 } /* look for non-zero values */
123
124 printf("%d\n", sieve[i]);
125 } /* FUNCTION process */
126
127 int main ()
128 {
129 /* main */
130 init();
131 process();
132 return EXIT_SUCCESS;
133 } /* main */
134