Radical of an integer: Difference between revisions

Add Cowgol
(Add C)
(Add Cowgol)
Line 117:
6: 2285
7: 8</pre>
=={{header|Cowgol}}==
<syntaxhighlight lang="cowgol">include "cowgol.coh";
 
sub radical(n: uint32): (rad: uint32, dpf: uint8) is
dpf := 0;
rad := 1;
 
# Handle factors of 2 first
if n & 1 == 0 then
dpf := 1;
rad := 2;
while n > 0 and n & 1 == 0 loop
n := n >> 1;
end loop;
end if;
 
# Divide out odd prime factors
var div: uint32 := 3;
while div <= n loop
if n % div == 0 then
dpf := dpf + 1;
rad := rad * div;
while n % div == 0 loop
n := n / div;
end loop;
end if;
div := div + 2;
end loop;
end sub;
 
sub first50() is
print("Radicals of 1..50:\n");
var n: uint32 := 1;
var dpf: uint8;
var rad: uint32;
while n <= 50 loop
(rad, dpf) := radical(n);
print_i32(rad);
if n % 5 != 0 then
print_char('\t');
else
print_nl();
end if;
n := n + 1;
end loop;
end sub;
 
sub print_rad(n: uint32) is
var dpf: uint8;
var rad: uint32;
print("The radical of ");
print_i32(n);
print(" is ");
(rad, dpf) := radical(n);
print_i32(rad);
print(".\n");
end sub;
 
sub find_distribution() is
var dist: uint32[8];
MemZero(&dist[0] as [uint8], @bytesof dist);
 
var n: uint32 := 1;
var dpf: uint8;
var rad: uint32;
while n <= 1000000 loop
print_i32(n);
print_char('\r');
(rad, dpf) := radical(n);
dist[dpf] := dist[dpf] + 1;
n := n + 1;
end loop;
 
print("Distribution of radicals:\n");
dpf := 0;
while dpf < 8 loop
print_i8(dpf);
print(": ");
print_i32(dist[dpf]);
print_nl();
dpf := dpf + 1;
end loop;
end sub;
 
first50();
print_nl();
print_rad(99999);
print_rad(499999);
print_rad(999999);
print_nl();
find_distribution();</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