479 Roots on the Rise.pl 464 B

123456789101112131415161718192021222324252627282930
  1. #!/usr/bin/perl
  2. # Daniel "Trizen" Șuteu
  3. # License: GPLv3
  4. # Date: 21 February 2018
  5. # https://github.com/trizen
  6. # https://projecteuler.net/problem=479
  7. # Runtime: 1.225s
  8. use 5.010;
  9. use strict;
  10. use warnings;
  11. use ntheory qw(powmod divmod mulmod);
  12. my $sum = 0;
  13. my $n = 10**6;
  14. my $m = 1000000007;
  15. foreach my $k (1 .. $n) {
  16. my $p = mulmod($k, $k, $m) - 1;
  17. $sum += divmod($p * ((-1)**$n * powmod($p, $n, $m) - 1), $p + 1, $m);
  18. $sum %= $m;
  19. }
  20. say $sum;