33 lines
844 B
Zig
33 lines
844 B
Zig
const MAXIMUM: u32 = 20_000;
|
|
|
|
// Fill up a given array with arr[n] = sum(propDivs(n))
|
|
pub fn calcPropDivs(divs: []u32) void {
|
|
for (divs) |*d| d.* = 1;
|
|
var i: u32 = 2;
|
|
while (i <= divs.len/2) : (i += 1) {
|
|
var j = i * 2;
|
|
while (j < divs.len) : (j += i)
|
|
divs[j] += i;
|
|
}
|
|
}
|
|
|
|
// Are (A, B) an amicable pair?
|
|
pub fn amicable(divs: []const u32, a: u32, b: u32) bool {
|
|
return divs[a] == b and a == divs[b];
|
|
}
|
|
|
|
pub fn main() !void {
|
|
const stdout = @import("std").io.getStdOut().writer();
|
|
|
|
var divs: [MAXIMUM + 1]u32 = undefined;
|
|
calcPropDivs(divs[0..]);
|
|
|
|
var a: u32 = 1;
|
|
while (a < divs.len) : (a += 1) {
|
|
var b = a+1;
|
|
while (b < divs.len) : (b += 1) {
|
|
if (amicable(divs[0..], a, b))
|
|
try stdout.print("{d}, {d}\n", .{a, b});
|
|
}
|
|
}
|
|
}
|