Not a member of Pastebin yet?
Sign Up,
it unlocks many cool features!
- # Farey_edeltaja_seuraaja.py
- # Annetun rationaaliluvun edeltäjä ja seuraaja Fareyn jonossa,
- # jossa kaikki nimittäjät pienempia tai yhtäsuuria kuin
- # annetun rationaaliluvun nimittäjä
- # tarvittaessa voit poistaa numba & njit -rivit
- # jotka nopeuttavat laskentaa melkoisesti
- # Kiitokset Farey-tiedoista Matti K. Sinisalolle
- # Juhani Kaukoranta 14.9.2019
- from numba import njit # voit poistaa rivin jos et käytä numbaa
- import time
- print("Etsitään annetun rationaaliluvun edeltäjä siinä Fareyn jonossa,")
- print("jonka määrittää annettu nimittäjä")
- nim = int(input("Anna rationaaliluvun nimittäjä: "))
- os = int(input("Anna rationaaliluvun osoittaja, oltava pienempi kuin nimittäjä: "))
- while os >= nim :
- os = int(input("Anna rationaaliluvun osoittaja, oltava pienempi kuin nimittäjä: "))
- a0 =os
- b0 = nim
- n = nim
- @njit # voit poistaa rivin jos et käytä numbaa
- def Farey(n,a0,b0):
- print("Fareyn jono,jossa n = ",n)
- a, b, c, d = 0, 1, 1,n
- while (c <= n):
- k = int((n + b) / d)
- a, b, c, d = c, d, k * c - a, k * d - b
- if (b*a0 - a*b0 == 1):
- print("Annetun rationaaliluvun ",a0,"/",b0," edeltäjä on ",a,"/",b)
- break
- a, b, c, d = 0, 1, 1,n
- while (c <= n):
- k = int((n + b) / d)
- a, b, c, d = c, d, k * c - a, k * d - b
- if (a*b0 - b*a0 == 1):
- print("Annetun rationaaliluvun ",a0,"/",b0," seuraaja on ",a,"/",b)
- break
- time0 = time.perf_counter() # timer alku
- Farey(n,os,nim)
- time1 = time.perf_counter() # timer loppu
- print("Aikaa kului ",time1-time0," sekuntia")
Advertisement
Add Comment
Please, Sign In to add comment