-
Notifications
You must be signed in to change notification settings - Fork 0
/
Copy pathCOMDIV.cpp
79 lines (68 loc) · 1.18 KB
/
COMDIV.cpp
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
//DATE: 11/10/2015
//Author: Ramjeet Saran
//http://www.spoj.com/problems/COMDIV/
# include <bits/stdc++.h>
# define gc getchar_unlocked
# define pc putchar_unlocked
# define li long int
# define RWTYPE long int
using namespace std;
RWTYPE fastread(){
char sign = '\0', c = gc();
RWTYPE ret = 0;
while((c < '0' ||c > '9') && c != '-'){
c = gc();
}
if(c == '-'){
sign = '1';
c = gc();
}
while(c >= '0' && c <= '9'){
ret = 10 * ret + c - 48;
c = gc();
}
if(sign)
ret =- ret;
return ret;
}
RWTYPE fastwrite(RWTYPE inp) {
RWTYPE a = (inp < 0) ? -inp : inp;
char snum[20];
int i = 0;
do
{
snum[i++] = a % 10 + 48;
a = a / 10;
}while(a != 0);
if(inp < 0)
snum[i++] = '-';
i--;
while(i >= 0)
pc(snum[i--]);
pc('\n');
}
li gcd(li A, li B) {
if(B == 0)
return A;
return gcd(B, A % B);
}
li num_div(int A) {
int count = 0;
int _sqrt = sqrt(A);
for(int i = 1; i <= _sqrt; i++)
if(A % i == 0)
count += 2;
if(_sqrt * _sqrt == A)
count--;
return count;
}
int main(){
int t;
li A, B;
t = fastread();
while(t--){
A = fastread();
B = fastread();
fastwrite(num_div(gcd(A, B)));
}
}