TL;DR

Here we are with TASK #1 from the Perl Weekly Challenge #109. Enjoy!

# The challenge

Write a script to generate first 20 Chowla Numbers, named after, Sarvadaman D. S. Chowla, a London born Indian American mathematician. It is defined as:

C(n) = (sum of divisors of n) - 1 - n


# The questions

The first question is a picky oneâ€¦ the definition above isnâ€™t really correct, is it?!? I mean, if we apply it to $n = 1$, technically speaking we get $-1$, so itâ€™s a good approximation.

Hence, Iâ€™ll refer to the definition in Rosetta code:

The chowla number of $n$ is (as defined by Chowlaâ€™s function):

• the sum of the divisors of $n$ excluding unity and $n$
• where $n$ is a positive integer

Then I guess we should start counting from $n = 1$ for taking the first $20$ elements, right?

# The solution

I was a bit surprised when I found out that itâ€™s possible to code a very compact solution:

#!/usr/bin/env perl
use 5.024;
use warnings;
use experimental qw< postderef signatures >;
no warnings qw< experimental::postderef experimental::signatures >;
use List::Util 'sum';

sub gcd { my ($A,$B) = @_; ($A,$B) = ($B %$A, $A) while$A; return $B } sub chowla_number ($n) { sum(grep { gcd($n,$_) == $_ } 2 ..$n - 1) // 0 }

say join ', ', map { chowla_number(\$_) } 1 .. 20;


Itâ€™s tremendously inefficient but fits within the number of columns I use as limit for coding subs as one-liners ðŸ™„ Moreoverâ€¦ itâ€™s only 20 items, right?

Stay safe!

Comments? Octodon, , GitHub, Reddit, or drop me a line!