aboutsummaryrefslogtreecommitdiff
path: root/challenge-133
diff options
context:
space:
mode:
authorMohammad S Anwar <Mohammad.Anwar@yahoo.com>2021-10-11 15:32:02 +0100
committerGitHub <noreply@github.com>2021-10-11 15:32:02 +0100
commitd5431f974b42f10c91b22905291440ca11bd37b6 (patch)
tree67e69ddb6a61be4349901a09dd9ca733ef727185 /challenge-133
parent96e3b2cb32e234061d4e034035415ab582600926 (diff)
parenta0665e303e1ba54b69379876d93272a4745a24d7 (diff)
downloadperlweeklychallenge-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.pl60
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++;
+ }
+}