mirror of
https://github.com/Kiritow/OJ-Problems-Source.git
synced 2024-03-22 13:11:29 +08:00
73 lines
1.6 KiB
C++
73 lines
1.6 KiB
C++
|
#include <iostream>
|
||
|
#include <cstdio>
|
||
|
#include <cstdlib>
|
||
|
#include <cstring>
|
||
|
#include <cmath>
|
||
|
#include <cctype>
|
||
|
#include <algorithm>
|
||
|
#include <queue>
|
||
|
#include <deque>
|
||
|
#include <queue>
|
||
|
#include <list>
|
||
|
#include <map>
|
||
|
#include <set>
|
||
|
#include <vector>
|
||
|
#include <utility>
|
||
|
#include <functional>
|
||
|
#include <fstream>
|
||
|
#include <iomanip>
|
||
|
#include <sstream>
|
||
|
#include <numeric>
|
||
|
#include <cassert>
|
||
|
#include <ctime>
|
||
|
#include <iterator>
|
||
|
const int INF = 0x3f3f3f3f;
|
||
|
const int dir[8][2] = {{-1,0},{1,0},{0,-1},{0,1},{-1,-1},{-1,1},{1,-1},{1,1}};
|
||
|
using namespace std;
|
||
|
#define LL __int64
|
||
|
const int MAX=100002;
|
||
|
int prime[MAX];
|
||
|
bool flag[MAX];
|
||
|
int main(void)
|
||
|
{
|
||
|
int t;
|
||
|
scanf("%d", &t);
|
||
|
memset(flag, true, sizeof(flag));
|
||
|
int cnt = 0;
|
||
|
for (int i = 2; i * i <= 100000; ++i)
|
||
|
{
|
||
|
if (flag[i])
|
||
|
for (int j = i*2; j <= 100000; j+=i)
|
||
|
flag[j] = false;
|
||
|
}
|
||
|
for (int i = 2; i <= 100000; ++i) if(flag[i]) prime[cnt++] = i;
|
||
|
while (t--)
|
||
|
{
|
||
|
int G, L;
|
||
|
scanf("%d%d", &G, &L);
|
||
|
int ans = 1;
|
||
|
if (L % G)
|
||
|
{
|
||
|
printf("0\n");
|
||
|
continue;
|
||
|
}
|
||
|
int K = L / G, S = K;
|
||
|
for (int i = 0; i < cnt; ++i)
|
||
|
{
|
||
|
if (prime[i] * prime[i] > S) break;
|
||
|
if (K%prime[i] == 0)
|
||
|
{
|
||
|
int touch = 0;
|
||
|
while (K%prime[i] == 0)
|
||
|
{
|
||
|
K /= prime[i]; touch++;
|
||
|
}
|
||
|
ans *= touch * 6;
|
||
|
}
|
||
|
}
|
||
|
if (K != 1) ans *= 6;
|
||
|
printf("%d\n", ans);
|
||
|
}
|
||
|
return 0;
|
||
|
}
|