Problem:
Score : 400 points

Problem Statement

Given are positive integers A and B.

Let us choose some number of positive common divisors of A and B.

Here, any two of the chosen divisors must be coprime.

At most, how many divisors can we choose?

Definition of common divisor

An integer d is said to be a common divisor of integers x and y when d divides both x and y.

Definition of being coprime

Integers x and y are said to be coprime when x and y have no positive common divisors other than 1.

Definition of dividing

An integer x is said to divide another integer y when there exists an integer \alpha such that y = \alpha x.

Constraints

All values in input are integers.

1 \leq A, B \leq 10^{12}

Input

Input is given from Standard Input in the following format:

A B

Output

Print the maximum number of divisors that can be chosen to satisfy the condition.

Sample Input 1

12 18

Sample Output 1

3

12 and 18 have the following positive common divisors: 1, 2, 3, and 6.

1 and 2 are coprime, 2 and 3 are coprime, and 3 and 1 are coprime, so we can choose 1, 2, and 3, which achieve the maximum result.

Sample Input 2

420 660

Sample Output 2

4

Sample Input 3

1 2019

Sample Output 3

1

1 and 2019 have no positive common divisors other than 1.

Solution in C (GCC 5.4.1) (judge verdict: Time Limit Exceeded)

#include <stdio.h>

void swap(long *a, long *b){
  long tp;
  tp=*a;
  *a=*b;
  *b=tp;
  return;
}

int isprime(long n){
  long i;
//  if(n<=2)return 1;
  for(i=547;i*i<=n;i++){
    if(n%i==0) return 0;
  }
  return 1;
}

int main()
{
  int prime[]={2,3,5,7,11,13,17,19,23 ,29 ,31 ,37 ,41 ,43 ,47 ,53 ,59 ,61 ,67 ,71,
    73 ,79 ,83 ,89 ,97 ,101 ,103 ,107 ,109 ,113 ,127 ,131 ,137 ,139 ,149 ,151 ,157 ,163 ,167 ,173,
    179 ,181 ,191 ,193 ,197 ,199 ,211 ,223 ,227 ,229 ,233 ,239 ,241 ,251 ,257 ,263 ,269 ,271 ,277 ,281,
    283 ,293 ,307 ,311 ,313 ,317 ,331 ,337 ,347 ,349 ,353 ,359 ,367 ,373 ,379 ,383 ,389 ,397 ,401 ,409,
    419 ,421 ,431 ,433 ,439 ,443 ,449 ,457 ,461 ,463 ,467 ,479 ,487 ,491 ,499 ,503 ,509 ,521 ,523 ,541};
  long a,b,newa,newb,i;
  int idx;
  int ans;
  scanf("%ld%ld", &a,&b);
  if(a<b) swap(&a,&b);
  while(newb=a%b){
    a=b;
    b=newb;
  }
  //lcd=b;
  ans=1;
  idx=0;
  int flag=1;
  while(flag && b>=prime[idx]){
    if(b%prime[idx]==0){
      ans++;
      while(b%prime[idx]==0) b/=prime[idx];
    }
    idx++;
    if(idx>=100) flag=0;
  }
  for(i=547;i<=b;i+=2) {
    if(b%i==0 && isprime(i)) ans++;
  }
  printf("%d\n",ans);
  return 0;
}