jukaukor

Kongruenssiyhtalo.jl

May 21st, 2020
68
0
Never
Not a member of Pastebin yet? Sign Up, it unlocks many cool features!
text 1.73 KB | None | 0 0
  1. # Multiplicative order Julia
  2. # Juhani Kaukoranta 21.5.2020
  3. using Primes
  4.  
  5. function factors(n)
  6. f = [one(n)]
  7. for (p,e) in factor(n)
  8. f = reduce(vcat, [f*p^j for j in 1:e], init=f)
  9. end
  10. return length(f) == 1 ? [one(n), n] : sort!(f)
  11. end
  12.  
  13. function multorder(a, m)
  14. gcd(a,m) == 1 || error("$a and $m are not coprime")
  15. res = one(m)
  16. for (p,e) in factor(m)
  17. m = p^e
  18. t = div(m, p) * (p-1)
  19. for f in factors(t)
  20. if powermod(a, f, m) == 1
  21. res = lcm(res, f)
  22. break
  23. end
  24. end
  25. end
  26. return res
  27. end
  28. # multiplicative order of 2 modulo primes
  29. b= primes(1,10000000);
  30. max = length(b);
  31.  
  32. function sopivat_alkuluvut(max)
  33. properprimes = Int64[] # kongruenssiyhtälölle kelvolliset kanditaatit
  34. s = 0
  35. for i in 2 : max
  36. if multorder(2,b[i]) % 2 != 0 && (b[i] % 8 == 1 || b[i] % 8 == 7)
  37. #println(b[i])
  38. s += 1
  39. push!(properprimes,b[i])
  40. end
  41. end
  42. print("sopivia alkulukuja oli ",s)
  43. return properprimes
  44. end
  45. # testaan kelvollisilla alkulukukanditaateilla p kongruenssiyhtälö
  46. # testataan n = ((2k+1)*ord(2,p))+2)*p yhtälölle 2^(n-2) = 1 (mod n)
  47. properprimes = sopivat_alkuluvut(max);
  48. nnumbers = Int64[]
  49. nmaxproper =length(properprimes)
  50. for i in 1 : nmaxproper
  51. mult = multorder(2,properprimes[i])
  52. for k in 1 : 100000
  53. n = ((2*k+1)*mult+2)*properprimes[i]
  54. if powermod(2,n-2,n)==1
  55. #println(n," factors: ",factor(n))
  56. push!(nnumbers,n)
  57. end
  58. end
  59. end
  60. nsorted = sort(nnumbers);
  61. nlukuja = length(nsorted)
  62. for i in 1 : nlukuja
  63. println(nsorted[i]," ",factor(nsorted[i]))
  64. end
Advertisement
Add Comment
Please, Sign In to add comment