Problem p02900 (C++)

Buggy submission (status: Time Limit Exceeded):
#include <bits/stdc++.h>
using namespace std;
#define mod 1000000007
#define pb push_back
#define mp make_pair
#define ll long long int
#define ld long double
#define vi vector<int>
#define vl vector<ll>
#define v2i vector<vector<int>>
#define v2l vector<vector<ll>>
#define ppi pair<int, int>
#define vpi vector<ppi>
#define ppl pair<ll, ll>
#define all(x) x.begin(), x.end()
#define ii int, int
#define ff first
#define ss second
#define forn(i, a, b) for (int i = a; i < b; i++)
#define forr(i, a, b) for (int i = a; i >= b; i--)
#define forv(i, m) for (auto i : m)
#define imx INT_MAX
#define imn INT_MIN
#define inf LONG_MAX
#define minf LONG_MIN
#define endl "\n"
#define fast                                                                   \
  ios_base::sync_with_stdio(false);                                            \
  cin.tie(NULL);
#define sze size()
#define rvs reverse
#define itr iterator
#define pre cout << fixed << setprecision(10);
#define umap unordered_map
#define uset unordered_set
#define pi 3.141592653589793
const ll infinity = 9e18;

/*
#define MODM(a,b,md) ((a%md)*(b%md))%md
#define MODA(a,b,md) ((a%md)+(b%md))%md
#define ull unsigned long long int
#define si short int
*/

/*
bool compare(int a,int b) {return a > b;}
bool compare1(ppi a,ppi b) {return a.ff > b.ff;}
bool compare2(ppi a,ppi b) {return a.ss < b.ss;}
ll Npower(ll a,ll b) {ll product = 1; while(b){if(b&1){product = product*a;}a =
a*a;b = b>>1;} return product;} ll power(ll a,ll b,ll md) {ll product = 1;
while(b){if(b&1){product = MODM(product,a,md);}a = MODM(a,a,md);b = b>>1;}
return product%md;} ll GCD(ll a,ll b) {return b==0 ? a:GCD(b,a%b);} ll LCM(ll
a,ll b) {return (a/GCD(a,b))*b; }
*/
bool isprime(ll n) {
  if (n < 2)
    return 0;
  ll i = 2;
  while (i * i <= n) {
    if (n % i == 0)
      return 0;
    i++;
  }
  return 1;
}

int main() {
  fast

      ll a,
      b;
  cin >> a >> b;

  ll n = __gcd(a, b);

  ll count = 1;

  int i = 1;

  for (; i * i < n; i++) {
    if (n % i == 0) {
      if ((n / i) & 1 && isprime(n / i))
        count++;
      if (i & 1 && isprime(i))
        count++;
      if (i == 2)
        count++;
    }
  }

  if (i * i == n && isprime(i)) {
    count++;
  }

  cout << count;

  return 0;
}

Fixed submission:
#include <bits/stdc++.h>
using namespace std;
#define mod 1000000007
#define pb push_back
#define mp make_pair
#define ll long long int
#define ld long double
#define vi vector<int>
#define vl vector<ll>
#define v2i vector<vector<int>>
#define v2l vector<vector<ll>>
#define ppi pair<int, int>
#define vpi vector<ppi>
#define ppl pair<ll, ll>
#define all(x) x.begin(), x.end()
#define ii int, int
#define ff first
#define ss second
#define forn(i, a, b) for (int i = a; i < b; i++)
#define forr(i, a, b) for (int i = a; i >= b; i--)
#define forv(i, m) for (auto i : m)
#define imx INT_MAX
#define imn INT_MIN
#define inf LONG_MAX
#define minf LONG_MIN
#define endl "\n"
#define fast                                                                   \
  ios_base::sync_with_stdio(false);                                            \
  cin.tie(NULL);
#define sze size()
#define rvs reverse
#define itr iterator
#define pre cout << fixed << setprecision(10);
#define umap unordered_map
#define uset unordered_set
#define pi 3.141592653589793
const ll infinity = 9e18;

/*
#define MODM(a,b,md) ((a%md)*(b%md))%md
#define MODA(a,b,md) ((a%md)+(b%md))%md
#define ull unsigned long long int
#define si short int
*/

/*
bool compare(int a,int b) {return a > b;}
bool compare1(ppi a,ppi b) {return a.ff > b.ff;}
bool compare2(ppi a,ppi b) {return a.ss < b.ss;}
ll Npower(ll a,ll b) {ll product = 1; while(b){if(b&1){product = product*a;}a =
a*a;b = b>>1;} return product;} ll power(ll a,ll b,ll md) {ll product = 1;
while(b){if(b&1){product = MODM(product,a,md);}a = MODM(a,a,md);b = b>>1;}
return product%md;} ll GCD(ll a,ll b) {return b==0 ? a:GCD(b,a%b);} ll LCM(ll
a,ll b) {return (a/GCD(a,b))*b; }
*/
bool isprime(ll n) {
  if (n < 2)
    return 0;
  ll i = 2;
  while (i * i <= n) {
    if (n % i == 0)
      return 0;
    i++;
  }
  return 1;
}

int main() {
  fast

      ll a,
      b;
  cin >> a >> b;

  ll n = __gcd(a, b);

  ll count = 1;

  ll i = 1;

  for (; i * i < n; i++) {
    if (n % i == 0) {
      if ((n / i) & 1 && isprime(n / i))
        count++;
      if (i & 1 && isprime(i))
        count++;
      if (i == 2)
        count++;
    }
  }

  if (i * i == n && isprime(i)) {
    count++;
  }

  cout << count;

  return 0;
}