Radical of an integer: Difference between revisions

Add C
(Add C)
Line 29:
<br>
 
=={{header|C}}==
<syntaxhighlight lang="c">#include <stdio.h>
 
int radical(int num, int *dps_out) {
int rad = 1, dps = 0, div;
 
if ((num & 1) == 0) {
while ((num & 1) == 0) num >>= 1;
rad *= 2;
dps++;
}
 
for (div = 3; div <= num; div += 2) {
if (num % div != 0) continue;
rad *= div;
dps++;
while (num % div == 0) num /= div;
}
 
if (dps_out != NULL) *dps_out = dps;
return rad;
}
 
 
void show_first_50() {
int n;
printf("Radicals of 1..50:\n");
for (n = 1; n <= 50; n++) {
printf("%5d", radical(n, NULL));
if (n % 5 == 0) printf("\n");
}
}
 
void show_rad(int n) {
printf("The radical of %d is %d.\n", n, radical(n, NULL));
}
 
void find_distribution() {
int n, dps, dist[8] = {0};
 
for (n = 1; n <= 1000000; n++) {
printf("%d\r", n);
radical(n, &dps);
dist[dps]++;
}
 
printf("Distribution of radicals:\n");
for (dps = 0; dps < 8; dps++) {
printf("%d: %d\n", dps, dist[dps]);
}
}
 
int main() {
show_first_50();
printf("\n");
show_rad(99999);
show_rad(499999);
show_rad(999999);
printf("\n");
find_distribution();
return 0;
}</syntaxhighlight>
{{out}}
<pre>Radicals of 1..50:
1 2 3 2 5
6 7 2 3 10
11 6 13 14 15
2 17 6 19 10
21 22 23 6 5
26 3 14 29 30
31 2 33 34 35
6 37 38 39 10
41 42 43 22 15
46 47 6 7 10
 
The radical of 99999 is 33333.
The radical of 499999 is 3937.
The radical of 999999 is 111111.
 
Distribution of radicals:
0: 1
1: 78734
2: 288726
3: 379720
4: 208034
5: 42492
6: 2285
7: 8</pre>
=={{header|FreeBASIC}}==
{{trans|XPL0}}
2,115

edits