jukaukor

Farey_edeltaja_seuraaja.cpp

Sep 14th, 2019
193
0
Never
Not a member of Pastebin yet? Sign Up, it unlocks many cool features!
text 2.07 KB | None | 0 0
  1. // Tunnetaan Farayn jonon n
  2. // Jonon kaikkien jäsenten nimittäjät < = n
  3. // Tunnetaan annetun jonon jäsen a / b supistetussa muodossa
  4. // jossa a < b , a < n, b <= n ja syt(a,b) = 1
  5. // Tehtävänä etsiä Fareyn jonon jäsenen a/b seuraaja ja edeltäjä
  6. // C++ ohjelma Farey_edeltaja_seuraaja.cpp
  7. // Perustuu Matti K Sinisalon artikkeliin
  8. // http://www.geocities.ws/mattiksinisalo/farey2.pdf
  9. // C++ ohjelma Farey_edeltaja_seuraaja.cpp
  10. // Juhani Kaukoranta 14.9.2019
  11.  
  12. #include <iostream>
  13. #include <stdio.h>
  14. #include <stdlib.h>
  15. #include <cinttypes>
  16. #include <iostream>
  17.  
  18. using namespace std;
  19.  
  20. long long int a0,b0,a,b,aold,bold,c,d,k,n;
  21. long double raja;
  22.  
  23. int main()
  24. {
  25.  
  26. cout << "Lasketaan annetun rationaaliluvun edeltäjä Fareyn jonossa" << endl;
  27. cout << "Anna rationaaliluvun osoittaja: " << endl;
  28. cin >> a0;
  29. cout << "Anna rationaaliluvun nimittäjä: " << endl;
  30. cin >> b0;
  31. cout << "a0/b0 = " << a0<<"/"<< b0 << endl;
  32. clock_t t0, t1; // Time
  33. n = b0;
  34. cout << "Fareyn rationaalilukujonon nimittäjä = " << n << endl;
  35. cout << "n = " << n << endl;
  36.  
  37. cout << "Laskenta käynnissä, ensin tulee edeltäjä, sitten seuraaja..." << endl << endl;
  38. a = 0;
  39. b = 1;
  40. c = 1;
  41. d = n;
  42. t0 = clock(); // timer alku
  43. while (c <= n) {
  44. k = int((n+b)/d);
  45. aold = a;
  46. bold = b;
  47. a = c;
  48. b = d;
  49. c = k*c - aold;
  50. d = k*d - bold;
  51. if (b*a0-a*b0 == 1) {
  52. cout << endl;
  53. cout << "Rationaaliluku "<< a << "/" << b << " on rationaaliluvun " << a0 << "/"<< b0 << " edeltäjä" << endl << endl;
  54. break;
  55. }
  56. }
  57. a = 0;
  58. b = 1;
  59. c = 1;
  60. d = n;
  61. while (c <= n) {
  62. k = int((n+b)/d);
  63. aold = a;
  64. bold = b;
  65. a = c;
  66. b = d;
  67. c = k*c - aold;
  68. d = k*d - bold;
  69. if (a*b0 - b*a0 == 1) {
  70. cout << endl;
  71. cout << "Rationaaliluku "<< a << "/" << b << " on rationaaliluvun " << a0 << "/"<< b0 << " seuraaja" << endl<<endl;
  72. break;
  73. }
  74. }
  75. t1 = clock(); // timer loppu
  76.  
  77. cout << "( Laskenta-aika oli: " << (double)(t1 - t0) / CLOCKS_PER_SEC << " sekuntia )" << endl;
  78. return 0;
  79. }
Advertisement
Add Comment
Please, Sign In to add comment