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 (Clang 3.8.0) (judge verdict: Runtime Error)

#include <stdio.h>
int main(){
    int a,b,count=0,result=0;
    int check =1;
    scanf("%d %d",&a,&b);
    int p[(a<b)?a:b];
    //素数判定
    for (int i=1;i<=((a<b)?a:b);i++){
        //printf("count:%d\n",count);
//iが素数かしらべる
    for (int j=1;j<count;j++){
        //iが素数か調べるために、既知の素数列pを用いる
        //printf("i:%d p[%d]:%d\n",i,j,p[j]);
        if(i%p[j]==0){
           // printf("%dは素数でない\n",i);
          check=0;
            break;//iは素数でない//下の処理を飛ばしiを増やす
        }
        check=1;
        }
    
    if (check==1){
        //以下は素数を追加する処理
        //printf("%dを%d番目の素数として認める\n",i,count+1);
        p[count]=i;
        // for(int k=0;k<=count;k++){
        //     printf("%d番目の素数は %d\n",k+1,p[k]);    
        // }        
        count++;
        check =1;
        //ここまで素数追加
        
        if (a%i==0&&b%i==0){
            //printf("c\n");
            //printf("素数%dは%d,%dをともにわれます\n",i,a,b);
            result++;
        }
    }
}
    printf("%d",result);
    return 0;
}