jukaukor

Farey_edeltaja_seuraaja.py

Sep 14th, 2019
194
0
Never
Not a member of Pastebin yet? Sign Up, it unlocks many cool features!
text 1.67 KB | None | 0 0
  1. # Farey_edeltaja_seuraaja.py
  2. # Annetun rationaaliluvun edeltäjä ja seuraaja Fareyn jonossa,
  3. # jossa kaikki nimittäjät pienempia tai yhtäsuuria kuin
  4. # annetun rationaaliluvun nimittäjä
  5. # tarvittaessa voit poistaa numba & njit -rivit
  6. # jotka nopeuttavat laskentaa melkoisesti
  7. # Kiitokset Farey-tiedoista Matti K. Sinisalolle
  8. # Juhani Kaukoranta 14.9.2019
  9.  
  10. from numba import njit # voit poistaa rivin jos et käytä numbaa
  11. import time
  12. print("Etsitään annetun rationaaliluvun edeltäjä siinä Fareyn jonossa,")
  13. print("jonka määrittää annettu nimittäjä")
  14. nim = int(input("Anna rationaaliluvun nimittäjä: "))
  15. os = int(input("Anna rationaaliluvun osoittaja, oltava pienempi kuin nimittäjä: "))
  16. while os >= nim :
  17. os = int(input("Anna rationaaliluvun osoittaja, oltava pienempi kuin nimittäjä: "))
  18.  
  19. a0 =os
  20. b0 = nim
  21. n = nim
  22.  
  23. @njit # voit poistaa rivin jos et käytä numbaa
  24. def Farey(n,a0,b0):
  25. print("Fareyn jono,jossa n = ",n)
  26. a, b, c, d = 0, 1, 1,n
  27. while (c <= n):
  28. k = int((n + b) / d)
  29. a, b, c, d = c, d, k * c - a, k * d - b
  30. if (b*a0 - a*b0 == 1):
  31. print("Annetun rationaaliluvun ",a0,"/",b0," edeltäjä on ",a,"/",b)
  32. break
  33. a, b, c, d = 0, 1, 1,n
  34. while (c <= n):
  35. k = int((n + b) / d)
  36. a, b, c, d = c, d, k * c - a, k * d - b
  37. if (a*b0 - b*a0 == 1):
  38. print("Annetun rationaaliluvun ",a0,"/",b0," seuraaja on ",a,"/",b)
  39. break
  40. time0 = time.perf_counter() # timer alku
  41. Farey(n,os,nim)
  42. time1 = time.perf_counter() # timer loppu
  43. print("Aikaa kului ",time1-time0," sekuntia")
Advertisement
Add Comment
Please, Sign In to add comment