Advertisement
Solingen

z6.3.cpp

Dec 21st, 2024
16
0
Never
Not a member of Pastebin yet? Sign Up, it unlocks many cool features!
C++ 1.72 KB | None | 0 0
  1. #include <iostream>
  2. #include "string.h"
  3. #include "array.h"
  4. using namespace std;
  5.  
  6. // Простейшая проверка простоты
  7. bool isPrime(unsigned long long x)
  8. {
  9.     if (x < 2) return false;
  10.     for (unsigned long long i = 2; i*i <= x; i++)
  11.         if (x % i == 0) return false;
  12.     return true;
  13. }
  14.  
  15. // Возвращает F(n)=2^(2^n)+1 или 0, если переполнение
  16. unsigned long long fermatNumber(int n)
  17. {
  18.     if (n >= 64) return 0;
  19.     unsigned long long exp = 1ULL << n; // 2^n
  20.     if (exp >= 64) return 0; // переполнение
  21.     unsigned long long val = 1ULL << exp; // 2^(2^n)
  22.     if (val == 0) return 0;
  23.     return val + 1;
  24. }
  25.  
  26. int main()
  27. {
  28.     cout << "Сколько чисел Ферма вывести? ";
  29.     int N;
  30.     cin >> N;
  31.  
  32.     // Сохраним числа Ферма в Array<unsigned long long>
  33.     Array<unsigned long long> fermas;
  34.     for (int i = 0; i < N; i++)
  35.     {
  36.         unsigned long long f = fermatNumber(i);
  37.         fermas.append(f);
  38.     }
  39.  
  40.     // Выведем каждое, используя String для формирования сообщения
  41.     for (int i = 0; i < N; i++)
  42.     {
  43.         unsigned long long f = fermas[i];
  44.         String msg = "F(";
  45.         msg = msg + to_string(i).c_str();
  46.         msg = msg + ") = ";
  47.  
  48.         if (f == 0)
  49.         {
  50.             msg = msg + "OVERFLOW_64_BIT";
  51.         }
  52.         else
  53.         {
  54.             msg = msg + to_string(f).c_str();
  55.             // Простота
  56.             if (isPrime(f))
  57.                 msg = msg + " (простое)";
  58.             else
  59.                 msg = msg + " (непростое)";
  60.         }
  61.  
  62.         cout << msg << endl;
  63.     }
  64.  
  65.     return 0;
  66. }
  67.  
Advertisement
Add Comment
Please, Sign In to add comment
Advertisement