In the equation X^2≡X(mod N) where x∈[0,N-1], we define He[N] as the number of solutions.
And furthermore, define HeHe[N]=He[1]*……*He[N]
Now here is the problem, write a program, output HeHe[N] modulo M for a given pair N, M.
Input
First line: an integer t, representing t test cases.
Each test case contains two numbers N (1<=N<=10^7) and M (0<M<=10^9) separated by a space.
Output
For each test case, output one line, including one integer: HeHe[N] mod m.
Sample Input
1
2 3
Sample Output
2
#include<cstdio>
#include<iostream>
#include<algorithm>
#include<cstring>
#include<cmath>
#include<bitset>
#include<vector>
#define N 10000500
using namespace std;
typedef long long ll;
ll fac[100];
int k=0;
ll n,m;
vector<int>prime;
bitset<N> vis;
void getPrime()
{
for(int i=2;i<N;i++)
if(!vis[i])
{
prime.push_back(i);
for(int j=i+i;j<N;j+=i)
vis[j]=true;
}
}
ll P(ll a,ll b,ll m)
{
ll ans=1;
while(b)
{
if(b&1)
ans=ans*a%m;
a=a*a%m;
b>>=1;
}
return ans;
}
ll work(ll x)
{
ll b=0;
for(int i=0;prime[i]<=x;i++)
b+=x/prime[i];
return P(2,b,m);
}
int main()
{
int t;
getPrime();
scanf("%d",&t);
while(t--)
{
scanf("%lld%lld",&n,&m);
//cout<<"hah";
printf("%lld\n",work(n));
}
return 0;
}