// isprime.cc
// g++ isprime.cc -o isprime -lgmpxx -lgmp
#include <gmpxx.h>
#include <iostream>
using namespace std;

typedef mpz_class Int;

string st[] = {
  " ist zusammengesetzt\n",
  " ist wahrscheinlich prim\n",
  " ist prim\n"
};

int prob_prime(Int n) {
  int c;
  c = mpz_probab_prime_p (n.get_mpz_t(), 5);
  cout << st[c];
  return c;
}

Int nextprime (Int x) {
  Int n;
  mpz_nextprime( n.get_mpz_t(), x.get_mpz_t() );
  return n;
}

int main(int argc, char *argv[]) {
  if (argc != 2) {
    cout << "Usage: " << argv[0] << " <Zahl>\n";
    return 1;
  }
  Int n = Int(argv[1]);
  cout << n;
  prob_prime(n);
  cout << "Naechste Primzahl: " << nextprime(n) << "\n";
}
