diff options
| author | Mohammad S Anwar <Mohammad.Anwar@yahoo.com> | 2021-10-11 15:32:02 +0100 |
|---|---|---|
| committer | GitHub <noreply@github.com> | 2021-10-11 15:32:02 +0100 |
| commit | d5431f974b42f10c91b22905291440ca11bd37b6 (patch) | |
| tree | 67e69ddb6a61be4349901a09dd9ca733ef727185 /challenge-133 | |
| parent | 96e3b2cb32e234061d4e034035415ab582600926 (diff) | |
| parent | a0665e303e1ba54b69379876d93272a4745a24d7 (diff) | |
| download | perlweeklychallenge-club-d5431f974b42f10c91b22905291440ca11bd37b6.tar.gz perlweeklychallenge-club-d5431f974b42f10c91b22905291440ca11bd37b6.tar.bz2 perlweeklychallenge-club-d5431f974b42f10c91b22905291440ca11bd37b6.zip | |
Merge pull request #5009 from corvettes13/patch-8
Create ch-2.pl
Diffstat (limited to 'challenge-133')
| -rw-r--r-- | challenge-133/paul-fajman/perl/ch-2.pl | 60 |
1 files changed, 60 insertions, 0 deletions
diff --git a/challenge-133/paul-fajman/perl/ch-2.pl b/challenge-133/paul-fajman/perl/ch-2.pl new file mode 100644 index 0000000000..f3d2a21544 --- /dev/null +++ b/challenge-133/paul-fajman/perl/ch-2.pl @@ -0,0 +1,60 @@ +#!/usr/bin/perl + +# Weekly Challenge 131 Task #2 +# Write a script to generate first 10 Smith Numbers in base 10. + + +use strict; +use warnings; +use List::Util 'sum'; + +my $number; +my $sn=0;#$sn tracks number of Smith numbers found. +my @factors; +my $i; +my $j=1; + +# a is used to calculate sum of digits of a given number +# b is used to track and calculate sum of digits from prime factorization +my (@a, @b); +my ($a, $b); + +while ($sn < 10) { + undef($b); # Reset prime factorization + undef(@factors); + $j++; + $number = $j; + @a = split(//,$number); + $a = sum(@a); + +# Is the number divisible by 2? + while ($number % 2 eq 0) { + $number = $number / 2; + unshift @factors, 2; + } +# Numbers must be odd. Skip by 2s to find rest of prime factors + for ($i = 3; $i< sqrt($number);$i+=2){ + while ($number % $i == 0) { + unshift @factors, $i; + $number = $number/$i; + } + } + + # Capture any large prime numbers + if ($number > 2) { + unshift @factors, $number; + } + + next if $#factors eq 0; #Prime Number + + # Loop through all factors and sum the digits + foreach(@factors) { + @b = split(//,$_); + $b+= sum(@b); + } + + if ($a eq $b) { + print "$j is a Smith number\n"; + $sn++; + } +} |
