Achilles numbers: Difference between revisions

Content added Content deleted
m (→‎{{header|Wren}}: Removed a blank line.)
m (→‎{{header|Raku}}: avoid unnecessary caching, remove some recalculations)
Line 183: Line 183:
}
}


my @achilles = powerful(10**5).sort.hyper.grep: {
my $achilles = powerful(10**9).hyper(:500batch).grep( {
my $f = .&prime-factors.Bag;
my $f = .&prime-factors.Bag;
(+$f.keys > 1) && (1 == [gcd] $f.values) && (.sqrt.Int² !== $_)
(+$f.keys > 1) && (1 == [gcd] $f.values) && (.sqrt.Int² !== $_)
} ).classify: { .chars }
};


my \𝜑 = 0, |(1..*).hyper.map: -> \t { t × [×] t.&prime-factors.squish.map: { 1 - 1/$_ } }
my \𝜑 = 0, |(1..*).hyper.map: -> \t { t × [×] t.&prime-factors.squish.map: { 1 - 1/$_ } }


my %ps = Set.new: @achilles;
my %as = Set.new: flat $achilles.values».list;


my @strong = @achilles.grep: { ?%ps{𝜑[$_]} };
my $strong = lazy (flat $achilles.sort».value».list».sort).grep: { ?%as{𝜑[$_]} };


put "First 50 Achilles numbers:";
put "First 50 Achilles numbers:";
put @achilles[^50].batch(10)».fmt("%4d").join("\n");
put (flat $achilles.sort».value».list».sort)[^50].batch(10)».fmt("%4d").join("\n");


put "\nFirst 30 strong Achilles numbers:";
put "\nFirst 30 strong Achilles numbers:";
put @strong[^30].batch(10)».fmt("%5d").join("\n");
put $strong[^30].batch(10)».fmt("%5d").join("\n");

my $achilles = powerful(10**9).hyper(:500batch).grep( {
my $f = .&prime-factors.Bag;
(+$f.keys > 1) && (1 == [gcd] $f.values) && (.sqrt.Int² !== $_)
} ).classify: { .chars }


put "\nNumber of Achilles numbers with:";
put "\nNumber of Achilles numbers with:";