463 A weird recurrence relation.sf 654 B

12345678910111213141516171819202122232425262728293031323334353637
  1. #!/usr/bin/ruby
  2. # Daniel "Trizen" Șuteu
  3. # License: GPLv3
  4. # Date: 22 February 2017
  5. # https://github.com/trizen
  6. # https://projecteuler.net/problem=463
  7. # Runtime: 0.012s
  8. func S(n) is cached {
  9. if (n <= 2) {
  10. return n
  11. }
  12. var (q, r) = divmod(n, 4)
  13. given(r) {
  14. when(3) {
  15. -8*S(q) + 6*S(2*q + 1) - 1
  16. }
  17. when(2) {
  18. -2*S(q-1) - 6*S(q) + 3*S(2*q) + 3*S(2*q + 1) - 1
  19. }
  20. when(1) {
  21. -2*S(q-1) - 6*S(q) + 4*S(2*q) + 2*S(2*q + 1) - 1
  22. }
  23. when(0) {
  24. -3*S(q-1) - 5*S(q) + 6*S(2*q) - 1
  25. }
  26. } % 1e9
  27. }
  28. say "S(3^37) mod 10^9 = #{S(3**37)}"