# Perl Weekly Challenge 158.

My solutions (task 1 and task 2 ) to the The Weekly Challenge - 158.

# Task 1: Additive Primes

```
Submitted by: Mohammad S Anwar
Write a script to find out all Additive Primes <= 100.
Additive primes are prime numbers for which the sum of their
decimal digits are also primes.
Output
2, 3, 5, 7, 11, 23, 29, 41, 43, 47, 61, 67, 83, 89
```

This is quite straightforward: Generate primes, split into digits, add and test for primeness, and it fits a small oneliner, borrowing functionality from available packages:

```
perl -MMath::Prime::Util=primes,is_prime -MList::Util=sum -E '
say join ", ", grep {is_prime(sum split "", $_)} (@{primes(100)});'
```

Results:

```
2, 3, 5, 7, 11, 23, 29, 41, 43, 47, 61, 67, 83, 89
```

The full version is similar:

```
1 # Perl weekly challenge 158
2 # Task 1: Additive primes
3 #
4 # See https://wlmb.github.io/2022/03/28/PWC158/#task-1-additive-primes
5 use v5.12;
6 use warnings;
7 use Math::Prime::Util qw(primes is_prime);
8 use List::Util qw(sum);
9 die "Usage: ./ch-1.pl N\n\tto print additive primes up to N" unless @ARGV;
10 my $N=shift;
11 die "N should be positive" unless $N>0;
12 say "The additive primes up to $N are ",
13 join ", ", grep {is_prime(sum split "", $_)} (@{primes($N)});
./ch-1.pl 100
```

Results:

```
The additive primes up to 100 are 2, 3, 5, 7, 11, 23, 29, 41, 43, 47, 61, 67, 83, 89
```

# Task 2: First Series Cuban Primes

```
Submitted by: Mohammad S Anwar
Write a script to compute first series Cuban Primes
<= 1000. Please refer wikipedia page for more informations.
Output
7, 19, 37, 61, 127, 271, 331, 397, 547, 631, 919.
```

The first series of cuban primes are primes which may be
written as the difference of two consecutive numbers. Thus, to
generate them I just generate pairs of consecutive numbers *x+1*
and *x* and test the difference of their *cubes*
*(x+1) ^{3}-x^{3}=3x^{2}+3x+1=1+3x(x+1)* for primeness (nothing to
do with Cuba, the country). As the
difference is not smaller than 3x

^{2}, it is enough to test up to (√1000)/3. This yields a small one-liner

```
perl -MMath::Prime::Util=primes,is_prime -E '
say join ", ", grep{is_prime $_}map{1+3*$_*($_+1)}(1..sqrt(1000/3))'
```

Results:

```
7, 19, 37, 61, 127, 271, 331, 397, 547, 631, 919
```

The corresponding program is:

```
1 # Perl weekly challenge 158
2 # Task 1: First series cuban primes
3 #
4 # See https://wlmb.github.io/2022/03/28/PWC158/#task-2-first-series-cuban-primes
5 use v5.12;
6 use warnings;
7 use Math::Prime::Util qw(is_prime);
8 die "Usage: ./ch-2.pl N\n\tto find cuban primes up to N" unless @ARGV;
9 my $N=shift;
10 die "N should be positive" unless $N>0;
11 my $bound=(-3+sqrt(3)*sqrt(4*$N-1))/6; # Solve (x+1)^3-x^3=N
12 say "The cuban primes up to $N are ",
13 join ", ", grep {is_prime $_} map {1+3*$_*($_+1)} (1..$bound);
```

I make a better estimate of the upper bound in order not to go beyond the maximum desired cuban number.

```
./ch-2.pl 2000
```

Results:

```
The cuban primes up to 2000 are 7, 19, 37, 61, 127, 271, 331, 397, 547, 631, 919, 1657, 1801, 1951
```