Advertisement
Leeen

lab for Gaidel' №1

Sep 24th, 2018
374
0
Never
Not a member of Pastebin yet? Sign Up, it unlocks many cool features!
C++ 1.68 KB | None | 0 0
  1. #include<iostream>
  2. #include<stdlib.h>
  3.  
  4. using namespace std;
  5.  
  6. long long getEiler(long long n) {
  7.     long long x;
  8.     x = n;
  9.     for (int i = 2; i*i <= n; i++)
  10.     {
  11.         if (n % i == 0)
  12.         {
  13.             while (n % i == 0) n /= i;
  14.             x -= x / i;
  15.         }
  16.         // Подсчет функции Эйлера
  17.     }
  18.     if (n > 1)
  19.     {
  20.         x -= x / n;
  21.         return x;
  22.     }
  23.     // Возвращение переменной х
  24. }
  25.  
  26. bool Prod()
  27. {
  28.     cout << "Продолжить? Y/N" << endl;
  29.     char yn;
  30.     cin >> yn;
  31.     cin.clear();
  32.     if (yn == 'Y' && cin.get() == '\n') return true;
  33.     else if (yn == 'N' && cin.get() == '\n') return false;
  34.     else
  35.     {
  36.         while (cin.get() != '\n');
  37.         cout << "Ошибка ввода символа" << endl;
  38.         Prod();
  39.     }
  40.     //функция, позволяющая пользователю продолжить работу
  41. }
  42.  
  43. int main()
  44. {
  45.     setlocale(LC_ALL, "ru");
  46.     bool t = true;
  47.     while (t)
  48.     {
  49.         long long n;
  50.         bool k = true;
  51.         while (k)
  52.         {
  53.             cout << "Введите натуральное число n чтобы узнать значение функции Эйлера для этого числа" << endl;
  54.             cout << "n: ";
  55.             cin >> n;
  56.             cin.clear();
  57.             if (cin.get() != '\n' || n < 0)
  58.             {
  59.                 cout << "Ошибка ввода числа" << endl;
  60.                 while (cin.get() != '\n') k = true;
  61.             }
  62.             else
  63.             {
  64.                 k = false;
  65.             }
  66.             // Часть кода, не позволяющая ввести неверное число и выкидывающая ошибку
  67.         }
  68.         long long x = getEiler(n); // вызов и подсчет функции Эйлера
  69.         cout << "Значение функции Эйлера равно: " << x << endl;
  70.         t = Prod();
  71.     }
  72.     return 0;
  73. }
Advertisement
Add Comment
Please, Sign In to add comment
Advertisement