jukaukor

Amicable_pairs.jl

Apr 21st, 2020
84
0
Never
Not a member of Pastebin yet? Sign Up, it unlocks many cool features!
text 1.54 KB | None | 0 0
  1. # Ystäväparit
  2. # Julia-ohjelma Brute Force -menetelmällä
  3. # ensin taulukoidaan summat vektoriksi summa[n]
  4. # Juhani Kaukoranta 20.4.2020
  5.  
  6. function Amicable_pairs(n)
  7. # ystäväparit, jotka < n
  8. # a ja b ovat ystäväpari (amicable numbers), jos
  9. # a = kokonaisluvun b tulontekijöiden summa
  10. # b = kokonaisluvun a tulotekijöiden summa
  11. # tulontekijat "proper divisors", itse luku ei ole mukana
  12. # taulukoidaan summat valmiiksi
  13. divsum = Array{Int64}(undef,n);
  14. m = div(n,4) # maksisumma noin n/4
  15. for j in 2 : m
  16. divsum[j] = properdivisorsum(j)
  17. end;
  18. maxn = maximum(divsum);
  19. println("n = ",n)
  20. println("m = ",m)
  21. println("maksimisumma = ",maxn)
  22. println("Ystäväparit, jotka pienempiä kuin ", n)
  23. for i in 2 : m
  24. j = divsum[i]
  25. if i < j && i == divsum[j]
  26. println(i, " ",divsum[i])
  27. end
  28. end
  29. end
  30.  
  31. function properdivisorsum(n)
  32. n_original = n
  33. result = 1
  34. for i in 2 : Int(trunc(sqrt(n)))+1
  35. curr_sum = 1
  36. curr_term = 1
  37. while n % i == 0
  38. n = div(n,i)
  39. curr_term = curr_term * i
  40. curr_sum += curr_term
  41. end
  42. result = result * curr_sum
  43. end
  44. # This condition is to handle the
  45. # case when original n is a prime number
  46. # greater than 2
  47. if n > 2
  48. result = result * (1 + n)
  49. end
  50. return (result - n_original)
  51. end
  52. time0 = time()
  53. Amicable_pairs(1000000*4)
  54. time1 = time()
  55. println("Aikaa kului ",time1-time0," sekuntia")
Advertisement
Add Comment
Please, Sign In to add comment